【问题标题】:replace (a+b)*3+7 by (aplusb)*3+7 in java?在java中用(aplusb)*3+7替换(a+b)*3+7?
【发布时间】:2015-01-10 15:11:54
【问题描述】:

我认为问题在标题中,

我已经用这个正则表达式 \\((.*?)\\) 尝试了匹配器和模式,但它让我得到的只是括号之间的字符串,没有 *3

我怎样才能改变它:(a+b)*3+7 对此:(aplusb)*3+7

我尝试了全部替换,但它也替换了我括号外的“+”,我得到了这个(aplusb)*3plus7 但我想像我说的那样替换它:(aplusb)*3+7

我在问之前尝试了很多方法,所以请帮助我 谢谢你的帮助,对不起我的英语不好:)

【问题讨论】:

  • 你要替换括号中的'+'
  • 您能否更具体地说明何时要将+ 替换为plus?它应该只在括号内,或者如果它没有被数字包围,或者可能有其他规则,如“先替换+我们找到”?

标签: java regex replace


【解决方案1】:

使用下面的正则表达式,然后将匹配的符号 + 替换为 plus 。由于+ 是一个正则表达式元字符,您需要对其进行转义以匹配文字+ 符号。

\+(?=[^()]*\))

上面的正则表达式只会匹配符号+,如果它后面跟着,

  • [^()]* 任何字符,但不是() 零次或多次。

  • \) 后跟一个右括号。

  • (?=...) 调用positive lookahead assertion 断言是否会发生匹配。这不会消耗任何字符。

DEMO

System.out.println("(a+b)*3+7".replaceAll("\\+(?=[^()]*\\))", "plus"));

输出:

(aplusb)*3+7

【讨论】:

  • @SilviuBurcea 问题需要 15 分钟,然后 OP 才能accept 任何答案。
【解决方案2】:

为什么不使用String.replaceFirst()

public class Main {

    public static void main(String[] args) {

        String s="(a+b)*3+7";
        System.out.println(s.replaceFirst("\\+","plus"));

    }
}

结果:(aplusb)*3+7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2016-01-11
    • 2022-06-30
    • 2021-09-20
    • 2023-03-04
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多