如何获得不以百分号结尾的数值?

编程语言 2026-07-09

我们将发票的PDF转换为文本,但它们差异很大。文本中包含任意文字、增值税税率(由 % 指示)以及金额(后面不是跟着 % 的数字)。目标是用正则表达式匹配这些金额。

已经尝试了不同的正则表达式模式,但都失败了。如何在C# 10和 .NET 10中提取不以 % 结尾的第一个数字?数字与 % 字符之间可能有空格,也可能没有空格。

对于以下文本,结果应为 4.235.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

Regex101

解决方案

你可以使用以下模式来匹配你正在寻找的字符串:

\b\d+\.\d+(?! ?%)\b

演示:https://regex101.com/r/LiIojB/1

解释:

  • \b 匹配一个单词边界,即字符串中在字母数字字符和空格或标点符号之间的位置。我在模式的开头和结尾各放一个,以防止它匹配超出你要找的内容。
  • \d 匹配一个数字字符,是 [0-9] 的简写。如果你觉得更直观,或者你的正则引擎不识别 \d,你也可以改用 [0-9]
  • 我假设你理解 + 运算符,以及字面量 .
  • (?! ...) 定义了一个负向前瞻组。在本例中,它包含模式 ?%,也就是一个可选空格后跟着一个百分号。因此如果当前匹配后面紧跟着一个百分号,或者先有一个空格再跟着一个百分号,匹配将失败。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章