正则表达式:寻找句子中的点,但在布里克内部

时间:2017-02-06 17:12:48

标签: java regex regex-lookarounds

我正在寻找一个正则表达式,在句子中的“点”上拆分一个java字符串,除非这些点在括号之间。 这就是说在这个例句中:

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

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

我设法得到了这个正则表达式:

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

但它不够好,因为它也会在第4和第5个字之间的点上分裂:-(

有什么想法解决这个特殊情况吗?

1 个答案:

答案 0 :(得分:0)

通过查看PerlMonks discussions我不认为单个正则表达式可以在Java中解决问题。

如果你可以使用多个步骤,那么你可以先删除所有pairs of brackets(从最里面开始),然后用点分割剩余的字符串:

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);
    }
}

导致the output

word1
word2
word3
word8