如何修改正则表达式,可将{{}}内括号包裹内容捕获为独立分组
正则修改方案
调整后正则表达式
(?<=\{\{)(\w+(?:\s+\w+)*)\|(\w+(?:\s+\w+)*)\|(\w+(?:\s+\w+)*)(?:\s+(\([^)]+\)))?\|(\w+(?:\s+\w+)*)(?=\}\})
修改说明
- 原正则无法匹配String1的核心原因是:原有分组的匹配规则
\w+(?:\s+\w+)*只支持字母、数字、下划线和空格,不能识别括号字符,且没有预留分组捕获括号包裹的内容 - 本次修改在原有第三段捕获规则后,新增了可选的非捕获组
(?:\s+(\([^)]+\)))?:- 外层
(?:)?标记该段为可选匹配,匹配String2时该段不会触发,原有逻辑完全不受影响 \s+匹配第三段文本和括号内容之间的空格- 新增的捕获组
(\([^)]+\))会完整匹配一对括号及括号内的所有非右括号内容,正好将(word4 word5)捕获为独立分组
- 外层
捕获结果说明
- 匹配String2时,分组1到分组3、分组5的捕获结果和原正则完全一致,新增的分组4返回空值
- 匹配String1时,分组1捕获
word1,分组2捕获word2,分组3捕获word3,分组4捕获(word4 word5),分组5捕获word6,符合需求
内容的提问来源于stack exchange,提问作者lo7
相关产品推荐
相关产品推荐

