【发布时间】:2015-08-03 13:33:42
【问题描述】:
我有以下代码:
input <- "1-FA-1-I2-1-I2-1-I2-1-EX-1-I2-1-I3-1-FA-1-I1-1-I2-1-TR-1-I1-1-I2-1-FA-1-I3-1-I1-1-FA-1-FA-1-NR-1-I3-1-I2-1-TR-1-I1-1-I2-1-I1-1-I2-1-FA-1-I2-1-I1-1-I3-1-FA-1-QU-1-I1-1-I2-1-I2-1-I2-1-NR-1-I2-1-I2-1-NR-1-I1-1-I2-1-I1-1-NR-1-I3-1-QU-1-I2-1-I3-1-QU-1-NR-1-I2-1-I1-1-NR-1-QU-1-QU-1-I2-1-I1-1-EX"
innovation_patterns <- gsub(input, pattern = "-1-", replacement = "-")
innovation_patterns <- lapply(innovation_patterns, str_extract_all, '(?:I\\d-?)*I3(?:-?I\\d)*')
这个输出:
"I2-I3" "I3-I1" "I3-I2" "I2-I1-I3" "I3" "I2-I3"
但是,我只想提取紧跟特定字符串的正则表达式的匹配项,例如:
仅当正则表达式前面有文字字符串时才匹配它 FA-I2-I2-I2-EX。
例如,这将是正则表达式的第一个匹配项,而第二个匹配项前面是 FA-I1-I2-TR-I1-I2-FA。
预期的输出与上面的正则表达式大致相同,但只选择了 5 个匹配项中的一个,因为它需要以特定的文字字符串开头。
如何修改这个正则表达式来达到这个目的?我假设它需要使用积极的后视来首先识别文字字符串,然后执行正则表达式。
【问题讨论】:
-
你的预期输出是什么?
-
但是没有子字符串
FA-I2-I2-I2-EX。 -
@AvinashRaj:一旦你这样做了
innovation_patterns <- gsub(input, pattern = "-1-", replacement = "-"),就会有。