簡體   English   中英

正則表達式來平衡括號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM