我希望匹配正则表达式,使得一个组中的符号(+或 - )和其他组中的符号。图可能没有任何符号(+或 - )
实施例
[-] 87.90
[+] 87.78
(-) 87.90
(+) 87.78
89
-89.56
- 89.98
我使用了以下正则表达式
^\W*(\-|\+|)\W*(\d+(\.\d+)?)
由此我在第1组中变空 如果我使用
^\W*(\-|\+)\W*(\d+(\.\d+)?)
然后第三个数字将不匹配。所以简而言之,我希望将数字与(+或 - )或没有任何符号匹配。
答案 0 :(得分:0)
第1组为空,因为\W*
贪婪地匹配所有非单词字符,即所有括号和符号。
您应该在模式中指定文字括号,而字符类将是一个更自然的构造,以匹配+
或-
:
(?:\(?([-+])\)?)?\p{Zs}*(\d+(\.\d+)?)
请参阅regex demo(如果您需要完整的字符串匹配,请在开始时使用^
,并在模式结尾使用$
。
正则表达式匹配:
(?:\(?([-+])\)?)?
- 可选的非捕获组((?:...)
),可选地匹配(
,后跟加号或减号(组1),然后是可选的{{ 1}} )
- 零个或多个空白符号\p{Zs}*
- (第2组)一个或多个数字后跟一个可选的捕获组(第3组),该组与一个句点后跟一个或多个数字匹配。结果: