Hi Joe, you could also rethink your pattern: grep("x1 \\+ x2", test, value = TRUE) grep("x1 \\+ x", test, value = TRUE) grep("x1 \\+ x[0-9]", test, value = TRUE) HTH Ulrik On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Joe, > This may help you: > > test <- c("x1", "x2", "x3", "x1 + x2 + x3") > multigrep<-function(x1,x2) { > xbits<-unlist(strsplit(x1," ")) > nbits<-length(xbits) > xans<-rep(FALSE,nbits) > for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE > return(all(xans)) > } > multigrep("x1 + x3","x1 + x2 + x3") > [1] TRUE > multigrep("x1 + x4","x1 + x2 + x3") > [1] FALSE > > Jim > > On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at gmail.com> > wrote: > > Hi Folks, > > > > Is there a way to find "x1 + x2 + x3" given "x1 + x3" as the pattern? > > Or is that a ridiculous question, since I'm trying to find something > > based on a pattern that doesn't exist? > > > > test <- c("x1", "x2", "x3", "x1 + x2 + x3") > > test > > [1] "x1" "x2" "x3" "x1 + x2 + x3" > > > > grep("x1 + x2", test, fixed=TRUE, value = TRUE) > > [1] "x1 + x2 + x3" > > > > > > But what if only have "x1 + x3" as the pattern and still want to > > return "x1 + x2 + x3"? > > > > grep("x1 + x3", test, fixed=TRUE, value = TRUE) > > character(0) > > > > I'm sure this looks like an odd question. I'm trying to build a > > function and stuck on this. Rather than dropping the whole function on > > the list, I thought I'd try one piece I needed help with...although I > > suspect that this question itself probably does bode well for my > > function :) > > > > Thanks! > > Joe > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
Wow. Thanks to everyone (Jim, Ng Bo Lin, Bert, David, and Ulrik) for all the quick and helpful responses. They have given me a better understanding of regular expressions, and certainly answered my question. Joe On Wed, Mar 22, 2017 at 12:22 AM, Ulrik Stervbo <ulrik.stervbo at gmail.com> wrote:> Hi Joe, > > you could also rethink your pattern: > > grep("x1 \\+ x2", test, value = TRUE) > > grep("x1 \\+ x", test, value = TRUE) > > grep("x1 \\+ x[0-9]", test, value = TRUE) > > HTH > Ulrik > > On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com> wrote: >> >> Hi Joe, >> This may help you: >> >> test <- c("x1", "x2", "x3", "x1 + x2 + x3") >> multigrep<-function(x1,x2) { >> xbits<-unlist(strsplit(x1," ")) >> nbits<-length(xbits) >> xans<-rep(FALSE,nbits) >> for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE >> return(all(xans)) >> } >> multigrep("x1 + x3","x1 + x2 + x3") >> [1] TRUE >> multigrep("x1 + x4","x1 + x2 + x3") >> [1] FALSE >> >> Jim >> >> On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at gmail.com> >> wrote: >> > Hi Folks, >> > >> > Is there a way to find "x1 + x2 + x3" given "x1 + x3" as the pattern? >> > Or is that a ridiculous question, since I'm trying to find something >> > based on a pattern that doesn't exist? >> > >> > test <- c("x1", "x2", "x3", "x1 + x2 + x3") >> > test >> > [1] "x1" "x2" "x3" "x1 + x2 + x3" >> > >> > grep("x1 + x2", test, fixed=TRUE, value = TRUE) >> > [1] "x1 + x2 + x3" >> > >> > >> > But what if only have "x1 + x3" as the pattern and still want to >> > return "x1 + x2 + x3"? >> > >> > grep("x1 + x3", test, fixed=TRUE, value = TRUE) >> > character(0) >> > >> > I'm sure this looks like an odd question. I'm trying to build a >> > function and stuck on this. Rather than dropping the whole function on >> > the list, I thought I'd try one piece I needed help with...although I >> > suspect that this question itself probably does bode well for my >> > function :) >> > >> > Thanks! >> > Joe >> > >> > ______________________________________________ >> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> > 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. >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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.-- Cooperative Fish and Wildlife Research Unit Zoology and Physiology Dept. University of Wyoming JoeCeradini at gmail.com / 914.707.8506 wyocoopunit.org
You did not describe the goal of your pattern matching. Were you trying to match any string that could be interpreted as an R expression containing X1 and X3 as additive terms? If so, you could turn the string into a one-sided formula and use the terms() function. E.g., f <- function(string) { fmla <- as.formula(paste("~", string)) term.labels <- attr(terms(fmla), "term.labels") all(c("X1","X3") %in% term.labels) }> f("X3 + X2 + X1")[1] TRUE> f("- X3 + X2 + X1")[1] FALSE> f("X3 + X2 + log(X1)")[1] FALSE> f("X3 + X2 + log(X1) + X1")[1] TRUE Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Mar 22, 2017 at 6:39 AM, Joe Ceradini <joeceradini at gmail.com> wrote:> Wow. Thanks to everyone (Jim, Ng Bo Lin, Bert, David, and Ulrik) for > all the quick and helpful responses. They have given me a better > understanding of regular expressions, and certainly answered my > question. > > Joe > > On Wed, Mar 22, 2017 at 12:22 AM, Ulrik Stervbo <ulrik.stervbo at gmail.com> wrote: >> Hi Joe, >> >> you could also rethink your pattern: >> >> grep("x1 \\+ x2", test, value = TRUE) >> >> grep("x1 \\+ x", test, value = TRUE) >> >> grep("x1 \\+ x[0-9]", test, value = TRUE) >> >> HTH >> Ulrik >> >> On Wed, 22 Mar 2017 at 02:10 Jim Lemon <drjimlemon at gmail.com> wrote: >>> >>> Hi Joe, >>> This may help you: >>> >>> test <- c("x1", "x2", "x3", "x1 + x2 + x3") >>> multigrep<-function(x1,x2) { >>> xbits<-unlist(strsplit(x1," ")) >>> nbits<-length(xbits) >>> xans<-rep(FALSE,nbits) >>> for(i in 1:nbits) if(length(grep(xbits[i],x2))) xans[i]<-TRUE >>> return(all(xans)) >>> } >>> multigrep("x1 + x3","x1 + x2 + x3") >>> [1] TRUE >>> multigrep("x1 + x4","x1 + x2 + x3") >>> [1] FALSE >>> >>> Jim >>> >>> On Wed, Mar 22, 2017 at 10:50 AM, Joe Ceradini <joeceradini at gmail.com> >>> wrote: >>> > Hi Folks, >>> > >>> > Is there a way to find "x1 + x2 + x3" given "x1 + x3" as the pattern? >>> > Or is that a ridiculous question, since I'm trying to find something >>> > based on a pattern that doesn't exist? >>> > >>> > test <- c("x1", "x2", "x3", "x1 + x2 + x3") >>> > test >>> > [1] "x1" "x2" "x3" "x1 + x2 + x3" >>> > >>> > grep("x1 + x2", test, fixed=TRUE, value = TRUE) >>> > [1] "x1 + x2 + x3" >>> > >>> > >>> > But what if only have "x1 + x3" as the pattern and still want to >>> > return "x1 + x2 + x3"? >>> > >>> > grep("x1 + x3", test, fixed=TRUE, value = TRUE) >>> > character(0) >>> > >>> > I'm sure this looks like an odd question. I'm trying to build a >>> > function and stuck on this. Rather than dropping the whole function on >>> > the list, I thought I'd try one piece I needed help with...although I >>> > suspect that this question itself probably does bode well for my >>> > function :) >>> > >>> > Thanks! >>> > Joe >>> > >>> > ______________________________________________ >>> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> > 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. >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> 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. > > > > -- > Cooperative Fish and Wildlife Research Unit > Zoology and Physiology Dept. > University of Wyoming > JoeCeradini at gmail.com / 914.707.8506 > wyocoopunit.org > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.