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

时间:2019-08-14 03:40:18

标签: java regex

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

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

2 个答案:

答案 0 :(得分:1)

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

选项1

通过添加(?:^[-+]|)组,您可以在首个匹配项(demo)中加入前+-个字符:

((?:^[-+]|)[\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

答案 1 :(得分:0)

您是否忘记了酒吧?

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

将+视为第二个“运算符”组的一部分,除非在字符串开头,(或[。