我有这样的数字运算:
-2-28*95+874-1545*-5+36
我需要提取操作数,而不是使用正则表达式的乘法运算中所隐含的:
-2
+874
+36
我尝试过类似的尝试,但没有成功:
[\+,-]\d+(?=\+|-|$)
此正则表达式也匹配-5
,并且
(?(?=\d+)[\+,-]|^)\d+(?=\+|-|$)
什么都不匹配。
我该如何解决这个问题?
答案 0 :(得分:1)
This RegEx可能会帮助您在一组()中捕获您不想要的模式,然后会留下所需的输出:
(((-|\+|)\d+\*(-|\+|)\d+))
您还可以使用其他特定于语言的功能,例如(* SKIP)(* FAIL)或(* SKIP)(* F)并获得{{3} }:
((((-|\+|)\d+\*(-|\+|)\d+))(*SKIP)(*FAIL)|([s\S]))
答案 1 :(得分:1)
另一种选择是匹配您不想要的内容,并在组中捕获您想要保留的内容。然后,您的值将进入第一个捕获组:
[+-]?\d+(?:\*[+-]?\d+)+|([+-]?\d+)
说明
[+-]?\d+
可选的+或-后跟1+个数字(?:\*[+-]?\d+)+
重复上一个模式1次以上,并添加*
|
或([+-]?\d+)
在第1组中捕获,匹配可选的+或-和1+数字答案 2 :(得分:1)
您可以使用
(?<!\*)[-+]\d*\.?\d+(?![*\d])
请参见regex demo
详细信息
(?<!\*)
-(确保当前位置为负数)不会立即以*
字符开头[-+]
--
或+
\d*
-0或更多数字\.?
-可选的.
字符\d+
-1个以上数字(?![*\d])
-不立即跟着*
或数字字符。查看正则表达式图: