使用正则表达式检测测序

时间:2015-09-21 13:35:05

标签: regex r string sequence-analysis

想象一下,我在列表中有多个字符串,如下所示:

[[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-"

我想使用正则表达式来检测特定字符串,其中某个子字符串位于另一个子字符串之前,但不一定在其他子字符串之前。

例如,我们假设我们正在寻找FA之前的EX。这需要匹配列表中的1。即使FA-1-I2-1-I2-1-I2-1-之间有EXFA仍然会出现在EX之前,因此预计会匹配。

如何定义通用正则表达式,以这种方式识别某些子串出现在另一个子串之前的字符串?

1 个答案:

答案 0 :(得分: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