[英]Regex to balance parenthesis
我有一個字符串,如“氧化鋅(ZnO))”,我需要一個正則表達式來平衡括號,結果應為“氧化鋅(ZnO)”。 我在正則表達式上工作不多。 有人可以幫我使用正則表達式嗎?
String.replace將是解決方案,但我需要一個正則表達式來平衡括號中的任何字符串,如示例中所示。
任何幫助,將不勝感激。
我完全同意您的問題下方的注釋,如果您要“平衡”的字符串像您的示例一樣簡單,則無法在字符串BUT中創建正則表達式來平衡括號,您可以測試如下內容:
"Zinc Oxide (ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)","");
演示中有一個\\w\\w\\w
,而不是示例中的\\\\w{1,100}
,因為在Java中僅(至少據我所知)在lookbehind中使用此語法。 Lookbehind是零長度點,因此在大多數正則表達式中,Lookbehind塊( (?<=...)
, (?=...)
等)不能包含量詞( +*?
)或間隔( {1,2}
),但在Java中,如果interval具有最小和最大長度是允許的(因此僅以{n}
或{min,max}
形式)。
但是正如我上面所說, 它僅適用於最簡單的輸入 ! 沒有嵌套的括號等。Java中的示例:
public class Test {
public static void main(String[] args) {
System.out.println("Zinc Oxide (ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide ((ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide ((ZnO)".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide (ZnO)))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide (((ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
}
}
輸出:
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.