正则表达式在一个长字符串中查找所有与金钱相关的值



>我正在尝试从长字符串中提取与金钱相关的价值。 我可以使用(?:cad|[$]|usd)s*d+?匹配以下格式

$1000
cad 1000 
usd 1000
  1. 我对带有 1000 个分隔符的那个有问题,比如 1,000 美元。
  2. 我试图添加(.d+)来考虑可选数字,但它不起作用。
  3. 如果我尝试考虑另一个约定,如 1000$ 和 1000cad,是否最好为反向符号和金额做一个单独的正则表达式?

test1 ="今天是 23,我今天付给你 10,000.78 美元 7">

预期 = $10,000.78

提前谢谢。

您可以编写一个交替|来匹配两种格式,并使用空格边界来防止部分匹配。

为了匹配钱,您可以使用字符类[d,.]+重复匹配数字、逗号或点,如果您知道钱总是采用预期的格式并且永远不会是例如$,,

(?<!S)(?:(?:cad|[$]|usd) ?[d,.]+|[d.,]+(?:cad|[$]|usd))(?!S)

查看正则表达式 101 演示。

使用正则表达式测试器来尝试一下。 一个好的是 https://regex101.com/。

您需要使用如下所示[]字符类:

(?:cad|[$]|usd)s*[d,.]+

。并摆脱告诉正则表达式在第一个数字之后停止的?

如果您想在之后检查可选内容,请添加一个可选分组:

(?:cad|[$]|usd)s*[d,.]+(?:cad|usd|$)?

。在这种情况下,尾随?表示"可选"。 此外,我建议使用"i"(不区分大小写)正则表达式开关。

犯规

最新更新