正则表达式 - 匹配包含“+”和“-”的字符串

Posted

技术标签:

【中文标题】正则表达式 - 匹配包含“+”和“-”的字符串【英文标题】:Regular Expressions - match a string containing "+" and "-" 【发布时间】:2015-07-21 02:46:04 【问题描述】:

我有一个字符串,比如1+++-3--+++++2,其中包括+- 符号。 我想做的是用+- 符号表示+- 部分。 如果字符串中有奇数个- 符号,我将用- 替换它,如果是偶数则替换为+。如何使用正则表达式做到这一点?

例如,我有一个数学表达式,比如1+-+-2-+--+3。它将被1+2-3 取代

【问题讨论】:

您可能想了解更多细节。如果-+ 都是奇数/偶数会发生什么?如果- 是奇数而+ 是偶数会发生什么? 我不关心+的数量是奇数还是偶数,最终结果只受-的数量影响 听起来不像是正则表达式问题 正如我所说,我使用正则表达式来匹配包含+- 符号的字符串 你如何期望 1+-+-2-+--+3 是 1+2-3? 【参考方案1】:

您可以创建一个运算符数组并使用for 循环来计算一个字符的所有出现次数。例如:

String expression = "1+++-3--+++++2";
String[] str = expression.split("[0-9]+");

for(op : str) 
    int count = 0;
    for(int i =0; i < str.length(); i++)
        if(op.charAt(i) == '-')
            count++;

    if(count % 2 == 0) 
        op = "-";
    
    else 
        op = "+";
    

str[]中修改后的单字符运算符赋值后,写新的表达式应该比较简单了。

【讨论】:

如果字符串是1++++--++3---+++---4怎么办? @DizzyCode 如果出现次数为偶数,则需要添加else语句处理字符串 @UnknownOctopus 嗯,谢谢你的建议,我看看我是否可以改进答案。问题似乎变了。 @DizzyCode 没问题 :)。应该只是一个简单的else str=str.replaceAll("-","+"); 另外,在你的if 语句的replaceAll 中,你应该根据OP 的需要将("-","+") 切换为("+","-") @UnknownOctopus 我相信现在的问题是要求用一个字符替换整个字符串。【参考方案2】:

基于格式将来自该计算器示例的假设。

//assumed format for input: <any number><any number of `-` and/or `+`><any number>

// 1++---+22+--1 will be 1-22+1
String input = "1++---+22+--1";
for (String s : input.split("[^-+]+");) 
    s = s.trim();
    if (!"".equals(s)) 
        String newStr = s.matches("[+]*-([+]*-[+]*-)*[+]*") ? "-" : "+";
        input = input.replace(s, newStr);
    

System.out.println(input);

【讨论】:

从技术上讲,您可以使用 Pattern/Matcher 循环编写更好的代码:Pattern p = Pattern.compile("[+-]+"); Matcher m = p.matcher(input); StringBuffer out = new StringBuffer(); while (m.find()) if (m.group().matches("[+]*-([+]*-[+]*-)*[+]*") m.appendReplacement(out, "-"); else m.appendReplacement(out, "+"); m.appendTail(out);

以上是关于正则表达式 - 匹配包含“+”和“-”的字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 如何完成匹配某个字符串 但是不包含指定字符串

用正则表达式怎样匹配 不包含特定字符串的字符串

linux 中 ^[^abc] 正则表达式啥意思

强烈推荐!Python 这个宝藏库 re 正则匹配

如何用正则表达式匹配括号中的内容,不包含括号

php 正则表达式 只能包含字母和数字