2017-04-11 77 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

相關問題