有没有办法以不同的方式识别正则表达式中的相同字符



我想写一个正则表达式,从一串数字和算术运算符中挑选出数字,我能够实现这一点。虽然,我想扩展程序的功能以匹配开头采用这种格式的数字:+32.

这是初始正则表达式:([d.A-Z√s]+)|([-+x÷]). 这就是我所取得的成就:([+]?[d.A-Z√s]+)([-+x÷])

让我们考虑一下您的示例+123+45+67和初始正则表达式([d.A-Z√s]+)|([-+x÷])

选项 1

通过添加(?:^[-+]|)组,您可以将前导+-字符包含在第一个匹配项(演示)中:

((?:^[-+]|)[d.A-Z√s]+)|([-+x÷])

该正则表达式将匹配:

+123
+
45
+
67

选项 2

如果您还需要捕获第一个数字而不使用前导+-字符,我会为此使用另一组,以避免重叠匹配的问题(demo)。

((?:^[-+]|)([d.A-Z√s]+))|([-+x÷])

此正则表达式捕获:

  • 组 1:包括一元运算符的数字(如果运算符存在)
  • 组 2:不带一元运算符的数字
  • 第 3 组:操作员(如果有)
match  group1  group2  group3 
+123    +123     123      
+                       +
45      45      45
+                       +
67      67      67

你漏掉酒吧了吗?

((?:\A+)?[\d.A-Z√\s]+)|([-+x÷])

将 + 视为第二个"运算符"组的一部分,除非前面有字符串开头、a (或 a [.

最新更新