R语言正则提取:如何获取至符号或字符串结尾的TAG模式?
字符串向量中提取指定TAG模式的解决方案
你遇到的问题核心是正则的贪婪匹配特性导致的——.*会尽可能匹配更多字符,当把$加入前瞻条件后,它会直接匹配到字符串末尾,忽略了前面的+-符号。
解决这个问题只需把贪婪匹配改成非贪婪匹配,用.*?替代.*,这样正则会在遇到第一个匹配的前瞻条件(+-或字符串结尾)时就停止匹配。
完整代码示例
str_vec <- c("TAG a", "TAG b-3", "TAG c+2", "2+TAG d") # 使用非贪婪匹配的正则表达式 result <- stringr::str_extract(str_vec, "TAG .*?(?=[\\+\\-]|$)") print(result) # 输出:[1] "TAG a" "TAG b" "TAG c" "TAG d"
原理说明
TAG:匹配固定的"TAG "前缀.*?:非贪婪匹配任意字符(尽可能少的匹配,避免跳过+-符号)(?=[\\+\\-]|$):前瞻断言,匹配到+、-或者字符串结尾的位置就停止
内容的提问来源于stack exchange,提问作者Jarn Schöber
相关产品推荐
相关产品推荐

