正则仅匹配第二种格式金额值,问题出在哪里?
正则问题分析与修复方案
原正则的问题根源
你写的正则里的|(或操作符)优先级搞砸了逻辑:它把整个表达式拆成了两个完全独立的分支:
- 第一个分支仅匹配
Court Case Fee这串文本,根本没处理后面的金额部分 - 第二个分支才是带金额捕获的
Court Filing Fee: Contract \$(?<court_case_fee>\d+\.\d+)
所以遇到Option1的文本时,正则只会匹配到Court Case Fee就停止,自然抓不到后面的金额。
修正后的正则写法
把两个前缀部分用括号包裹,让它们共享后面的金额捕获规则:
/(Court Case Fee|Court Filing Fee: Contract) \$(?<court_case_fee>\d+\.\d+)/mi
如果想更简洁,可以提取公共前缀Court,优化成:
/Court (Case Fee|Filing Fee: Contract) \$(?<court_case_fee>\d+\.\d+)/mi
效果验证
- 对Option1的文本,能正确捕获到
214.00 - 对Option2的文本,能正确捕获到
198.00
内容的提问来源于stack exchange,提问作者ReynierPM
相关产品推荐
相关产品推荐

