2017-04-11 53 views
0

我有以下信息:正则表达式 - 替换文本忽略来自圆括号的文本

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

b)。字符串namename2

我需要更换[name(label)][name2(label2)]用另一个字符串(什么都可以圆括弧之间)(说*),所以结果需要被* bla * bla [name3(bla3)]

输入

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

name and name2

输出

* bla * bla [name3(bla3)]

我如何能做到这一点在Java中使用正则表达式?

+2

输入和输出例如 – ZiTAL

+0

如若'name'和'标签'最后有相同的号码,还是只是一个例子? –

+0

Java语言。 'name'和'label'最后不需要有相同的数字。 – Paul

回答

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样本:

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);

+0

作品!这可以改进,用'*'替换'[name]'和'[name2]'(不包括那些圆括号)吗? – Paul

+0

@Paul更新了答案 –

+0

谢谢。需要对正则表达式进行小修改:删除最后一个'\\' - 我无法编辑您的文章。 – Paul

2

正则表达式:“\ [?NAME2 \([^ \)] + \)\]”

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

我编辑了答案 – ZiTAL

+1

更好,谢谢。请注意,您已重新实现['String.join'](http://stackoverflow.com/a/26195047/6419007)。 –

+1

@EricDuminil java 1.7中没有String.join :( – ZiTAL

相关问题