2015-10-19 158 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