正则表达式 - 替换忽略圆括号中文本的文本

时间:2017-04-11 09:32:39

标签: java regex string

我有以下信息:

A)。这种格式的字符串[name(label)] bla [name2(label2)] bla [name3(bla3)]

B)。字符串namename2

我需要将[name(label)][name2(label2)](任何可以在圆括号之间)替换为另一个字符串(比如*),因此结果必须为* bla * bla [name3(bla3)] < / p>

输入

[name(label)] bla [name2(label2)] bla [name3(bla3)]

namename2

输出

* bla * bla [name3(bla3)]

如何在Java中使用正则表达式?

2 个答案:

答案 0 :(得分:2)

正则表达式:&#34; \ [name2?\([^ \]] + \)\]&#34;

import java.util.regex.*;

public class ValidateDemo
{
    public static void main(String[] args)
    {
        String[] inputA = new String[] {"name", "name2"};
        String tmp = "";

        for (int i = 0; i < inputA.length; i++)
        {
            if(i>0)
                tmp+="|";
            tmp+=inputA[i];
        }
        tmp = "("+tmp+")";
/*
        System.out.println(tmp);
        System.exit(0);
*/
        String regex = "\\["+tmp+"\\([^\\)]+\\)\\]";
        String input = "[name(label)] bla [name2(label2)] bla [name3(bla3)]\n";
        String output = input.replaceAll(regex,"*");
        System.out.println(output);
    }
}

答案 1 :(得分:1)

试试这个正则表达式:

\[(name|name2)(\(.*?\))?\]

并用你想要的东西代替*

Regex Demo

Java示例:

String regex = "\\[(name|name2)(\\(.*?\\)\\)?]";
String string = "[name(label)] bla [name2(label2)] bla [name3(bla3)]\n";
String result = string.replaceAll(regex,"*");
System.out.println(result);

Javascript示例:

&#13;
&#13;
const regex = /\[(name|name2)(\(.*?\))?\]/gm;
const str = `[name(label)] bla [name2(label2)] bla [name3(bla3)]  [name] [name2]`;
const subst = `*`;
const result = str.replace(regex, subst);
console.log(result);
&#13;
&#13;
&#13;