2015-09-21 92 views
2

想象我在列表中有多個字符串是這樣的:檢測採用序正則表達式

[[1]] 
[1] "1-FA-1-I2-1-I2-1-I2-1-EX-1-I2-1-I3-1-FA-1-" 
[2] "-1-I2-1-TR-1-"        
[3] "-1-I2-1-FA-1-I3-1-"       
[4] "-1-FA-1-FA-1-NR-1-I3-1-I2-1-TR-1-"   
[5] "-1-I2-1-"         
[6] "-1-I2-1-FA-1-I2-1-"       
[7] "-1-I3-1-FA-1-QU-1-"       
[8] "-1-I2-1-I2-1-I2-1-NR-1-I2-1-I2-1-NR-1-"  
[9] "-1-I2-1-"         
[10] "-1-NR-1-I3-1-QU-1-I2-1-I3-1-QU-1-NR-1-I2-1-" 
[11] "-1-NR-1-QU-1-QU-1-I2-1-" 

我想用正則表達式來檢測特定的字符串,其中某個子先於另一個子,但不一定直接前面的另一個子字符串。

例如,假設我們正在尋找之前的FAEX。這需要在列表中匹配1。即使FA自身與EX之間有-1-I2-1-I2-1-I2-1-FA仍然出現在EX之前,因此預計會進行匹配。

如何定義一個通用正則表達式來標識某些子串以這種方式出現在另一個子串之前的字符串?

回答

8

您可以使用grep。

x <- c("1-FA-1-I2-1-I2-1-I2-1-EX-1-I2-1-I3-1-FA-1-" ,"-1-I2-1-TR-1-") 
grepl("FA.*EX", x) 
#[1] TRUE FALSE 
grep("FA.*EX", x) 
#[1] 1