正则匹配:仅提取[Tt]otaa?l excl/incl BTW后的金额值
解决正则提取指定关键词后金额的问题
嗨,我来帮你搞定这个正则提取的问题~你之前的思路方向有点搞反啦,咱们一步步来调整:
问题核心分析
你需要的是只提取紧跟在「Totaal/totaal exclusief BTW」或「Totaal/totaal inclusief BTW」之后的金额,但之前用的负前瞻是在排除符合条件的内容,自然得不到想要的结果。咱们应该用正向后瞻来精准锁定前置的关键词,再捕获对应的金额。
正确的正则表达式
方案1:支持可变长度后瞻的引擎(Python3.7+、Java、C#等)
直接用后瞻锁定前置关键词,然后匹配金额:
(?<=[Tt]otaa?l\s*(?:exclusief|inclusief)\s*BTW\s*)[€]\s*\d+(?:[,.]\d{0,2})?
如果需要把金额作为单独分组捕获,就把金额部分包起来:
(?<=[Tt]otaa?l\s*(?:exclusief|inclusief)\s*BTW\s*)([€]\s*\d+(?:[,.]\d{0,2})?)
方案2:不支持可变长度后瞻的引擎(旧版Python等)
如果你的正则引擎不支持可变长度后瞻,就换个思路:直接匹配关键词+金额,然后提取金额分组:
[Tt]otaa?l\s*(?:exclusief|inclusief)\s*BTW\s*([€]\s*\d+(?:[,.]\d{0,2})?)
匹配后取每个结果的第1个分组即可。
正则各部分解释
[Tt]otaa?l:匹配大小写的Totaal/totaal(a?表示第二个a可选,对应你原文里的totaa?l)\s*(?:exclusief|inclusief)\s*BTW:匹配中间的exclusief或inclusief,前后允许任意空白,后面跟BTW;用(?:...)是避免生成多余的捕获分组(?<=...):正向后瞻,确保前面的内容是我们指定的关键词[€]\s*\d+(?:[,.]\d{0,2})?:匹配金额格式,支持€后带空白,整数部分,可选的小数部分(逗号或点分隔,0-2位小数)
测试结果
用你的目标字符串测试,会精准提取到:€ 50,18 和 € 70,07,完全符合你的期望输出~
内容的提问来源于stack exchange,提问作者rumba
相关产品推荐
相关产品推荐

