2015-10-19 101 views
2

我想提取匹配字符串模式的字符串。要说得通:提取字符串匹配条件的模式匹配

x <- "this.is.fairly//Whatit.is/path/IDbeginUntilhere7/seenit" 

目标是正则表达式是返回:IDbeginUntilhere。我尝试这样做:

str <- regmatches(x, gregexpr("^I.*7$", x)) 

,我明白这是行不通的,因为I位于字符串中间。这个问题可能太简单了,但我会很感激我能得到的任何帮助。

+5

省略^和$。这些指定模式从字符串的开始处开始并结束于结尾处。 –

+0

谢谢。那么问题真的很简单! – remi

+0

更好,如果它是非贪婪'str < - regmatches(x,gregexpr(“^ I。*?7 $”,x))'或'str < - regmatches(x,gregexpr(“^ I [^ I] * 7 $“,x))' –

回答

2

很明显,主要问题是锚点:字符串^开始和字符串结尾$

第二个问题是贪婪点也将匹配/定界的子部分(即将匹配整个Id7/Not-to-match7而不是Id7)。

你需要使用像

str <- regmatches(x, gregexpr("I[^/]*7", x)) 

regex demo

如果您不需要7,你需要使用一个前瞻,以及类似Perl的正则表达式:

str <- regmatches(x, gregexpr("I[^/]*(?=7)", x, perl=TRUE)) 

请参阅another demo