正则表达式查找不在短语中的数字

Regex to find numbers that are not in a phrase

如果我有这个字符串:

Beschreibung Menge VK-Preis MwSt% Betrag
Schadenbewertunginkl.Restwertermittlung 1 25,00€ 19 25,00€
Rechnungsbetragexcl.MwSt.: 25,00€
MwSt.(19%): 4,75€
Rechnungsbetragincl.MwSt.: 123.029,75€

我想提取所有的数字。 我的正则表达式是:

regex_up_to_thousand = r'\b(?:\d{1,3}){1}(?:,{1}\d{2})\b'

regex_every_price = r'\b(?:\d{1,3}(\.|,))+(:?\d{3}(\.|,))(?:\d{2})\b'

我的想法是首先获取“大”价格,将它们从文本中删除并获取其他数字。 这在大多数情况下都有效,直到我有一个看起来像这样的日期 maybe

Gutachtennummer: 1009126 Leistungsdatum: 11.10.2021

我会用我的第二个正则表达式得到 11.10,但我不知道如何防止这种情况发生。 我认为 \b 会有帮助,但遗憾的是没有。

有什么想法吗? 这不是世界末日,因为我在后台做了很多数学运算,但有可能某个日期适合某些值,最后我计算出了一些错误。

您可以尝试以下模式。

\b\d+(?:(?:\.|,)\d{3})*(?:(?:\.|,)\d{2})\b(?!\W\d)

最主要的是最后的 (?!\W\d),它确保在您的金额之后您不会有 1 个 non-word 字符后跟 1 个数字的结构。

示例:https://regex101.com/r/q1ic9S/1