You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则表达式问题:匹配价格时排除末尾带百分号的内容

解决Tesseract识别文本中精准匹配价格、排除税额的正则问题

问题分析

你当前的正则表达式/\d+[\d \]\/\|o,\'.]*\s*/i范围太宽泛,它会匹配任何数字开头且后续跟着指定字符的序列,所以误命中了带百分号的税额7.7。我们需要调整正则规则,明确区分独立价格和末尾带百分号的税额,同时兼容Tesseract可能出现的识别误差(比如数字间多余的空格)。

解决方案

使用以下正则表达式可以精准匹配目标价格5'067.00,同时自动排除带百分号的税额:

$regex = "/(?<!\\d)\\d+(?:['.]\\d+)*\\b(?!\\s*%)/i";

正则规则拆解

逐个部分解释这个正则的作用:

  • (?<!\d):负向零宽断言,确保匹配的数值前面不是数字,避免从长数字串中截取片段;
  • \d+:匹配价格开头的整数部分;
  • (?:['.]\d+)*:非捕获组,匹配价格的千分位分隔符(单引号')或小数点(.)及后续数字,*表示该部分可重复(支持1'234.56这类多千分位的格式);
  • \b:单词边界,确保匹配的是完整的数值,而非更长字符的一部分;
  • (?!\s*%):负向零宽断言,确保数值后面没有跟着可选空格加百分号%,直接排除税额类数值。

测试验证

将这个正则应用到你的识别文本( Preis inkl. 7. 7 % MWST ist 5'067.00)上,会精准匹配到5'067.00,而7. 7因为后续跟着%会被自动排除,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Maisen1886

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:09