如何用str_detect检测HJFC0230之后的HGSA0010(含中间字符)
解决方案
你的问题在于原正则里的正向预查(?=HGSA0010)要求HGSA0010必须紧跟在HJFC0230之后,中间不能有任何字符,所以无法匹配两者间存在其他内容的场景。
要检测HJFC0230之后是否出现HGSA0010,可以使用匹配任意中间字符的正则表达式:
library(stringr) x <- "30098 HGQX0080 ; 30098 HJFC0230 ; 30098 HGMA0030 ; 30098 ZZQX0270 ; 30098 ZZQX1880 ; 30099 ZCQH0010 ; 30099 YYYY6000 ; 30106 ZCQH0010 ; 30106 YYYY6000 ; 30163 HGSA0010 ; 30163 ZZQX1880" str_detect(x, "HJFC0230.*HGSA0010")
正则说明
HJFC0230:匹配目标起始字符串.*:匹配任意数量的任意字符(默认不包含换行符)HGSA0010:匹配目标结束字符串
如果你的字符串可能包含换行符,可以添加(?s)模式修饰符,让.匹配包括换行在内的所有字符:
str_detect(x, "(?s)HJFC0230.*HGSA0010")
运行上述代码,针对你的示例字符串会返回TRUE,因为HGSA0010确实出现在HJFC0230之后。
内容的提问来源于stack exchange,提问作者Alexandre Challine
相关产品推荐
相关产品推荐

