正则表达式:浮点数与非数字符号的完全匹配

Regex: full match of floating numbers with non-digit symbols

我想知道如何在同样具有非数字符号的给定数据集中获得正数和负数的完全匹配。 我有一堆货币交易,我只想提取数值。

使用以下正则表达式,我可以正确获取所有数字,但找不到获取“-”符号的方法。

知道为什么吗?

(\d+)(,(\d{3}))*((?=[,.-](\|$))|(\.\d+))

数据集:

null
null
(.08 CAD)
(-.06 CAD)
(€50.03 EUR)
(,024.38 CAD)
(-,024,309.06 CAD)
(€50.03 EUR)

期望的输出:

7.08
-1.06
50.03
1,024.38
-1,024,309.06
50.03

正则表达式示例 https://regex101.com/r/Nw8EdE/2

一个选项是为可选的 - 和数字部分使用 2 个捕获组,并匹配 [$€]?

之间的可选欧元或美元符号

然后您可以连接第一个和第二个捕获组作为结果。

(-?)[$€]?(\d+(?:[,.]\d+)*)

说明

  • (-?) 捕获 组 1,匹配可选 -
  • [$€]? 可选择匹配列出的字符中的 1 个
  • ( 捕获 第 2 组
    • \d+ 匹配 1+ 个数字
    • (?:[,.]\d+)* 重复 0 次以上匹配 ,. 后跟 1+ 个数字
  • ) 关闭群组

Regex demo