用于匹配操作序列的正则表达式

时间:2019-04-27 20:46:41

标签: regex

我有这样的数字运算:

-2-28*95+874-1545*-5+36

我需要提取操作数,而不是使用正则表达式的乘法运算中所隐含的:

-2
+874
+36

我尝试过类似的尝试,但没有成功:

[\+,-]\d+(?=\+|-|$) 

此正则表达式也匹配-5,并且

(?(?=\d+)[\+,-]|^)\d+(?=\+|-|$)

什么都不匹配。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

This RegEx可能会帮助您在一组()中捕获您不想要的模式,然后会留下所需的输出:

(((-|\+|)\d+\*(-|\+|)\d+))

enter image description here

您还可以使用其他特定于语言的功能,例如(* SKIP)(* FAIL)(* SKIP)(* F)并获得{{3} }:

((((-|\+|)\d+\*(-|\+|)\d+))(*SKIP)(*FAIL)|([s\S]))

the desired output

如果愿意,您也可以enter image description here表达,并删除不必要的组。

答案 1 :(得分:1)

另一种选择是匹配您不想要的内容,并在组中捕获您想要保留的内容。然后,您的值将进入第一个捕获组:

[+-]?\d+(?:\*[+-]?\d+)+|([+-]?\d+)

说明

  • [+-]?\d+可选的+或-后跟1+个数字
  • (?:\*[+-]?\d+)+重复上一个模式1次以上,并添加*
  • |
  • ([+-]?\d+)在第1组中捕获,匹配可选的+或-和1+数字

Regex demo

答案 2 :(得分:1)

您可以使用

(?<!\*)[-+]\d*\.?\d+(?![*\d])

请参见regex demo

详细信息

  • (?<!\*)-(确保当前位置为负数)不会立即以*字符开头
  • [-+]--+
  • \d*-0或更多数字
  • \.?-可选的.字符
  • \d+-1个以上数字
  • (?![*\d])-不立即跟着*或数字字符。

查看正则表达式图:

enter image description here