On Sat, Jun 12, 2010 at 5:38 AM, Ted Harding <ted.hard...@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@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.