如何修改正则表达式捕获方括号内由1、2组成的完整数字
问题原因
你原有正则的问题出在.*是贪婪匹配模式,会尽可能多匹配字符,因此在匹配到]#之前,会把方括号内除了最后一位数字2之外的字符都吞掉,最终导致DIGIT分组仅能捕获到2。
修改方案
可以直接精准匹配方括号边界,同时限定DIGIT分组的匹配规则,修改后的正则如下:
(?P<VOL>.*):.*\[(?P<DIGIT>[12]+)]#(?P<PIN>.*)$
规则说明
- 新增
\[精准匹配左方括号,阻断前面贪婪匹配吞掉方括号内的数字内容 - 将DIGIT分组的匹配规则改为
[12]+,严格限定仅匹配数字1和2,符合你要求的「方括号内的数字仅允许出现1或2」的规则 - 右方括号直接正常匹配,确保只捕获方括号范围内的内容
匹配结果验证
针对你的测试字符串Continuity:pass_mV[12]#x_u_123,修改后的正则匹配结果如下:
- VOL分组:
Continuity - DIGIT分组:
12 - PIN分组:
x_u_123
内容的提问来源于stack exchange,提问作者Kelvin Lo
相关产品推荐
相关产品推荐

