我想将所有要添加的数字分组。

  • 测试字符串:'82 + 18-10.2 + 3 + 37 = 6 + 7
  • 在此处添加82 + 18 cab,并将其替换为值'100。
  • 然后测试字符串将变为:100-10.2 + 3 + 37 = 6 +7
  • 同样可以在测试字符串中添加2 + 3 + 37并替换为
    遵循:100-10.42 = 6 +7
  • 现在无法完成6 +7,因为值后面有空格
    '6'。

  • 我的想法是提取应该添加的数字,如下所示:
  • 82 + 18
  • 2 + 3 + 37

  • 然后添加它,并在字符串中使用replace()方法将其替换

    尝试过正则表达式:
    (?=([0-9]{1,}[\\+]{1}[0-9]{1,}))
    

    输入样例:
    82+18-10.2+3+37=6 + 7
    

    用于标识要添加和替换的组的Java代码:
        import java.util.regex.Matcher;
        import java.util.regex.Pattern;
    
        public class ReplaceAddition {
    
            static String regex = "(?=([0-9]{1,}[\\+]{1}[0-9]{1,}))";
            static String testStr = "82+18-10.2+3+37=6 + 7 ";
    
            public static void main(String[] args) {
                Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
                Matcher matcher = pattern.matcher(testStr);
    
                while (matcher.find()) {
                System.out.println(matcher.group(0));
                    for (int i = 1; i <= matcher.groupCount(); i++) {
                        System.out.println(matcher.group(i));
                    }
                }
            }
    }
    

    输出:
  • 82 + 18
  • 2 + 18
  • 2 + 3
  • 3 + 37

  • 不明白我在哪里失踪。帮助将不胜感激...

    最佳答案

    我尝试通过删除正向超前运算符来简化正则表达式

    (?=...)
    

    以及圆括号
    (...)
    

    经过这些更改后,正则表达式如下
    static String regex = "[0-9]{1,}[\\+]{1}[0-9]{1,}";
    

    运行它时,我得到以下结果:
    82+18
    2+3
    

    这接近预期,但仍不完美,因为我们得到的是“2 + 3”而不是2 + 3 + 37。为了处理任意数量的加数而不是仅仅两个,可以将表达式进一步调整为:
    static String regex = "[0-9]{1,}(?:[\\+]{1}[0-9]{1,})+";
    

    我在这里添加的是一个非捕获组
    (?:...)
    

    加号表示一个或多个重复。现在程序产生输出
    82 + 18
    2 + 3 + 37
    如预期的那样。

    关于java - 将所有带有+符号的数字相加,并将其替换为增加的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57419312/

    10-12 18:58