Re: [R] Logic with regexps

From: Ted Harding <Ted.Harding_at_manchester.ac.uk>
Date: Sat, 12 Jun 2010 16:47:00 +0100 (BST)


Thanks, Gabor, for the initiation to perly regexps! I've only been used to extended ones till now. A pity, perhaps, that "perl=TRUE" is not an option for the likes of browseEnv(), help.search(), list.files() and ls() (which take extended regexps), but one can always assign the output and then grep(...,perl=TRUE) on that, as you illustrate.

It would seem that these "look-ahead" features cold allow quite complex logical conditions to be built up (though with increasing unreadability and head-scratching)!

Best wishes,
Ted.

On 12-Jun-10 14:10:13, Gabor Grothendieck wrote:

> On Sat, Jun 12, 2010 at 5:38 AM, Ted Harding
> <Ted.Harding_at_manchester.ac.uk> wrote:

>> Greetings,
>> The following question has come up in an off-list discussion.
>> Is it possible to construct a regular expression 'rex' out of
>> two given regular expressions 'rex1' and 'rex2', such that a
>> character string X matches 'rex' if and only if X matches 'rex1'
>> AND X does not match 'rex2'?
>>
>> The desired end result can be achieved by logically combining
>> the results of a grep using 'rex1' with the results of a grep
>> on 'rex2', illustrated by the following example:
>>
>> ## Given character vector X (below), and two regular exdpressions
>> ## rex1="abc", rex2="ijk", to return the elements of X which match
>> ## rex1 AND do not match rex1:
>> X <- c(
>> _"abcdefg", _ _ _ # Yes
>> _"abchijk", _ _ _ # No
>> _"mnopqrs", _ _ _ # No
>> _"ijkpqrs", _ _ _ # No
>> _"abcpqrs" ) _ _ _# Yes
>> rex1 <- "abc"
>> rex2 <- "ijk"
>> ix1<- grep(rex1,X)
>> ix2<- grep(rex2,X)
>> X[ix1[!(ix1 %in% ix2)]]
>> ## [1] "abcdefg" "abcpqrs"
>>
>> Question: is there a way to construct 'rex' from 'rex1' and 'rex2'
>> such that
>>
>> _X[grep(rex,X)]
>>
>> would given the same result?
> 
> Try this:
> 
>    rex <- "^(?!(.*ijk)).*abc"
>    grep(rex, X, perl = TRUE)
> 
> Also note that X[grep(rex, X, perl = TRUE)] can be written:
> 
>    grep(rex, X, perl = TRUE, value = TRUE)
> 
> See ?regex for more info.  Further regular expression links can be
> found in the External Links box on the gsubfn home page at
> http://gsubfn.googlecode.com
> 
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding_at_manchester.ac.uk> Fax-to-email: +44 (0)870 094 0861
Date: 12-Jun-10                                       Time: 16:46:56
------------------------------ XFMail ------------------------------

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Sat 12 Jun 2010 - 15:48:51 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 12 Jun 2010 - 15:50:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive