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