如何获得不以百分号结尾的数值?
我们将发票的PDF转换为文本,但它们差异很大。文本中包含任意文字、增值税税率(由 % 指示)以及金额(后面不是跟着 % 的数字)。目标是用正则表达式匹配这些金额。
已经尝试了不同的正则表达式模式,但都失败了。如何在C# 10和 .NET 10中提取不以 % 结尾的第一个数字?数字与 % 字符之间可能有空格,也可能没有空格。
对于以下文本,结果应为 4.23 和 5.67。
Arbitrary text 3.12 % Arbitrary text 4.23 Arbitrary text
或
Arbitrary text 5.67 Arbitrary text 8% Abitrary text
我尝试了正则表达式 -?[0-9]{1,3}(?:[_,.]?[0-9]{3})*[.,]?[0-9]{0,2}[^%],但它返回了 3.12。
解决方案
你可以使用以下模式来匹配你正在寻找的字符串:
\b\d+\.\d+(?! ?%)\b
演示:https://regex101.com/r/LiIojB/1
解释:
\b匹配一个单词边界,即字符串中在字母数字字符和空格或标点符号之间的位置。我在模式的开头和结尾各放一个,以防止它匹配超出你要找的内容。\d匹配一个数字字符,是[0-9]的简写。如果你觉得更直观,或者你的正则引擎不识别\d,你也可以改用[0-9]。- 我假设你理解
+运算符,以及字面量.。 (?! ...)定义了一个负向前瞻组。在本例中,它包含模式?%,也就是一个可选空格后跟着一个百分号。因此如果当前匹配后面紧跟着一个百分号,或者先有一个空格再跟着一个百分号,匹配将失败。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。