正則表達式去除括號的問題


正則表達式去除括號的問題

某字符串 aaa(bbb)cccddd
需求是要判斷是否包含 aaa(bbb),如果包含,那就去掉(bbb),輸出aaacccddd

我們先使用正則表達式:
String content = "aaa(bbb)cccddd";
String reg= "aaa(\\(bbb\\))";
Matcher mac = Pattern.compile(reg).matcher(content);
if(mac.find()){
content = content.replaceAll(mac.group(1), "");
}

這段代碼卻輸出了 aaa()cccddd這樣的結果
為什么沒有去掉括號呢?

mac.group(1)輸出了 (bbb) 的結果,卻沒有被replaceAll替換掉括號。原因是這里括號又沒有正則轉譯,系統沒有識別。

(注:reg里的括號,沒有轉譯的部分會被正則表達式識別為分組)

所以這里只能用如下方法:
String content = "aaa(bbb)cccddd";
String reg= "aaa\\(bbb\\)";
Matcher mac = Pattern.compile(reg).matcher(content);
if(mac.find()){
//因為正則里不識別括號,只能把括號里內容提取出來,然后前后拼接括號
//取出括號里的內容
String brace = getBrace(mac.group(1));
//拼接括號
brace = "\\("+ brace + "\\)";
content = content.replaceAll(brace, "");
}

//提取括號里的內容
public static String getBrace(String str){
Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
Matcher m = p.matcher(str);
while(m.find()){
str = m.group().substring(1, m.group().length()-1);
}
return str;
}

把去除括號的方法修改一下,拿出括號里的內容,前后拼接括號,再去除。

這樣就可以了。輸出結果aaacccddd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM