如何替换正则表达式中的文本?

时间:2014-02-04 09:30:58

标签: java regex

String a = "1+2cos(3)+2tan(4)+ln(3)";
String b = a.replaceAll("\) *(\w+)","*");

我希望我的字符串像

String a = "1+2*cos(3)+2*tan(4)+ln(3)" ;

4 个答案:

答案 0 :(得分:3)

试试这个:

String b = a.replaceAll("(\d)([a-zA-Z])","$1*$2");

以上将查找字母表旁边的数字,然后使用捕获组将在两者之间插入*

答案 1 :(得分:1)

您可以使用肯定的lookbehinds and lookaheads

String b = a.replaceAll("(?<=[0-9]+)(?=[a-z]+)", "*");

从正则表达式翻译成英文:在字符串中以数字开头并后跟字母的任何位置插入*

答案 2 :(得分:0)

你可以用这个:

    String a = "1+2cos(3)+2tan(4)+ln(3)";
    String b = "1+cos(3)+2tan(5)";
    System.out.println(a.replaceAll("(\\d+)(cos|tan)","$1*$2"));
    System.out.println(b.replaceAll("(\\d+)(cos|tan)","$1*$2"));

收率:

    1+2*cos(3)+2*tan(4)+ln(3)
    1+cos(3)+2*tan(5)

以上内容将匹配单词costan后面的任何数字,并将其放入一个组中。然后,它会查找单词costancos|tan),并将它们放在一个组中(用圆括号表示)。完成后,它将替换所有数字实例,后跟costan,其中包含匹配的数字,后跟*,后跟匹配的任何项目。

答案 3 :(得分:0)

尝试,

String string1 = "1+2cos(30)+2tan(4)+ln(39)";
string1 = string1.replaceAll("([0-9]+)(cos|sin|tan|cot|ln|log)", "$1*$2");
System.out.println(string1);