正则表达式在长字符串中找到所有与金钱相关的值
Regex find all money related value in a long string
我正在尝试从一个长字符串中提取与金钱相关的值。
我可以使用 (?:cad|[$]|usd)\s*\d+?
匹配以下格式
00
cad 1000
usd 1000
- 我有 1000 个分隔符的问题,比如 1,000 美元。
- 我尝试添加
(\.\d+)
来解释可选数字,但它不起作用。
- 如果我尝试考虑另一个约定,例如 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。
我正在尝试从一个长字符串中提取与金钱相关的值。
我可以使用 (?:cad|[$]|usd)\s*\d+?
00
cad 1000
usd 1000
- 我有 1000 个分隔符的问题,比如 1,000 美元。
- 我尝试添加
(\.\d+)
来解释可选数字,但它不起作用。 - 如果我尝试考虑另一个约定,例如 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。