Vadim Ogranovich
2004-Nov-19 01:55 UTC
[R] how to get to interesting part of pattern match
Hi, I am looking for a way to extract an "interesting" part of the match to a regular expression. For example the pattern "[./](*.)" matches a substring that begins with either "." or "/" followed by anything. I am interested in this "anything" w/o the "." or "/" prefix. If say I match the pattern against "abc/foo" I want to get "foo", not "/foo". In Perl one can simply wrap the "interesting" part in () and get it out of the match. Is it possible to do a similar thing in R? There seems to be a way to refer to the match, see below, but I couldn't figure out how to make gsub return it.> gsub("[./](*.)", "\\1", "abc/foo")[1] "abcfoo" Thanks, Vadim
sub(".*/", "", "abc/foo") [1] "foo" Jean On Thu, 18 Nov 2004, Vadim Ogranovich wrote:> Hi, > > I am looking for a way to extract an "interesting" part of the match to > a regular expression. For example the pattern "[./](*.)" matches a > substring that begins with either "." or "/" followed by anything. I am > interested in this "anything" w/o the "." or "/" prefix. If say I match > the pattern against "abc/foo" I want to get "foo", not "/foo". In Perl > one can simply wrap the "interesting" part in () and get it out of the > match. Is it possible to do a similar thing in R? > > There seems to be a way to refer to the match, see below, but I couldn't > figure out how to make gsub return it. > > gsub("[./](*.)", "\\1", "abc/foo") > [1] "abcfoo" > > > Thanks, > Vadim > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
Gabor Grothendieck
2004-Nov-19 03:17 UTC
[R] how to get to interesting part of pattern match
Vadim Ogranovich <vograno <at> evafunds.com> writes: : I am looking for a way to extract an "interesting" part of the match to : a regular expression. For example the pattern "[./](*.)" matches a : substring that begins with either "." or "/" followed by anything. I am : interested in this "anything" w/o the "." or "/" prefix. If say I match : the pattern against "abc/foo" I want to get "foo", not "/foo". In Perl : one can simply wrap the "interesting" part in () and get it out of the : match. Is it possible to do a similar thing in R? : : There seems to be a way to refer to the match, see below, but I couldn't : figure out how to make gsub return it. : > gsub("[./](*.)", "\\1", "abc/foo") : [1] "abcfoo" Assuming what was meant is the following (dot and star are transposed and gsub is sub): sub("[./](.*)", "\\1", "abc/foo") then the regular expression matches /foo and the backreference contains foo so it replaces /foo with foo which is why it returns abcfoo . To get just foo ensure that your regular expression matches the entire string so that the entire string is replaced with the backreference: sub("[^./]*[./](.*)", "\\1", "abc/foo")
Vadim Ogranovich wrote:>Hi, > >I am looking for a way to extract an "interesting" part of the match to >a regular expression. For example the pattern "[./](*.)" matches a >substring that begins with either "." or "/" followed by anything. I am >interested in this "anything" w/o the "." or "/" prefix. If say I match >the pattern against "abc/foo" I want to get "foo", not "/foo". In Perl >one can simply wrap the "interesting" part in () and get it out of the >match. Is it possible to do a similar thing in R? > >There seems to be a way to refer to the match, see below, but I couldn't >figure out how to make gsub return it. > > >>gsub("[./](*.)", "\\1", "abc/foo") >> >> >[1] "abcfoo" > > >Thanks, >Vadim > >______________________________________________ >R-help at stat.math.ethz.ch mailing list >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > >what about: gsub(".*[./](*.)", "\\1", "abc/foo") output-start [1] "foo" output-end or try: strsplit("abc/foo","/")[[1]][2] output-start [1] "foo" output-end Peter Wolf