R语言使用正则表达式按双大括号拆分字符串的匹配异常问题
正则表达式匹配错误原因及修复方案
核心错误原因
你编写的正则出现问题的核心是对**正则字符集语法[]**的规则误解:
- 方括号
[]仅用于定义单个字符的匹配范围,内部写入的所有内容都会被解析为独立的单个字符,不会识别量词、多字符匹配规则。你写的[^\\}{2,2}]实际含义是「匹配1个不属于}、{、2、,这四个字符的字符」,完全不是你预期的「匹配所有不等于}}的多字符序列」。 - 因此你的正则会在扫描到
{或}时就停止前半段的匹配,仅会匹配到最后一段不含{/}的字符(hot、lazy)加上末尾的}},最终输出你看到的结果。
符合需求的实现方案
你要实现「匹配任意内容直到最近的}}为止」的逻辑,使用惰性匹配规则即可:
# R中正则写法,双反斜杠为R字符串的转义要求 pattern_test <- ".*?\\}\\} teststring <- "{the {dog} is {hot}},{the {cat} is {lazy}}" tmp <- unlist(str_extract_all(teststring, pattern_test)) tmp
运行后输出结果为 "{the {dog} is {hot}}"、",{the {cat} is {lazy}}",和你的预期一致。
内容的提问来源于stack exchange,提问作者William Dowd
相关产品推荐
相关产品推荐

