将正则表达式与文字字符串相结合

前端之家收集整理的这篇文章主要介绍了将正则表达式与文字字符串相结合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码

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个匹配中的一个,因为它需要在特定的文字字符串之前.

如何修改此正则表达式以实现此目的?我假设它需要使用正向lookbehind来首先识别文字字符串,然后执行正则表达式.

解决方法

以下是如何实现它:

lapply(innovation_patterns,'(?<=FA-I2-I2-I2-EX-?)(?:I\\d-?)*I3(?:-?I\\d)*');
## [[1]]
## [[1]][[1]]
## [1] "I2-I3"

猜你在找的正则表达式相关文章