将正则表达式与文字字符串相结合
发布时间:2020-12-14 06:03:30 所属栏目:百科 来源:网络整理
导读:我有以下代码: 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-
我有以下代码:
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,'(?:Id-?)*I3(?:-?Id)*') 这输出: "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-?)(?:Id-?)*I3(?:-?Id)*'); ## [[1]] ## [[1]][[1]] ## [1] "I2-I3" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |