我正在寻找一个正则表达式,在句子中的“点”上拆分一个java字符串,除非这些点在括号之间。 这就是说在这个例句中:
word1.word2.word3[word4.word5[word6.word7]].word8
我想只拆分前两个和最后一个(就在“word8”之前)。
我设法得到了这个正则表达式:
\.(?![^\[]*?\])
但它不够好,因为它也会在第4和第5个字之间的点上分裂:-(
有什么想法解决这个特殊情况吗?
答案 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