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

Regex find all money related value in a long string

我正在尝试从一个长字符串中提取与金钱相关的值。 我可以使用 (?:cad|[$]|usd)\s*\d+?

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

测试 1 = 'Today is 23, I will pay you ,000.78 today by 7'

预计 = 10,000.78 美元

提前致谢。

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

你需要像这样使用字符 class []:

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

... 并去掉告诉正则表达式在第一个数字后停止的 ?

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

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

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

犯规

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

如果您知道钱总是以预期的格式并且永远不会是示例 $,,

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

看到一个regex 101 demo