簡體   English   中英

正則表達式:查找括號內的句點

[英]Regex : Looking for dots in a sentence except inside braquets

我正在尋找一個正則表達式來拆分句子中“點”上的Java字符串,除非這些點在方括號之間。 就是說在這個例句中:

word1.word2.word3[word4.word5[word6.word7]].word8

我只想拆分前兩個和最后一個(就在“ word8”之前)。

我設法去了這個正則表達式:

\.(?![^\[]*?\])

但這還不夠好,因為它還會在單詞4和5之間的點上分開:-(

有解決這個特殊情況的想法嗎?

通過查看PerlMonks的討論,我認為單個正則表達式無法在Java中解決問題。

如果可以使用多個步驟,則可以先刪除所有成對的括號 (從最里面開始),然后用點將其余的字符串分開:

public static void main (String[] args) {

    String str = "word1.word2.word3[word4.word5[word6.word7]].word8";
    final Pattern BRACKET_PAIR = Pattern.compile("\\[[^\\[\\]]+\\]");

    while (BRACKET_PAIR.matcher(str).find()) {
        str = BRACKET_PAIR.matcher(str).replaceFirst("");
    }

    for (String word: str.split("\\.")) {
        System.out.println(word);
    }
}

結果輸出

word1
word2
word3
word8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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