我正在尝试开发一个与句子中第一个句点匹配的正则表达式 - 只要该句号不在任何括号内。
所以,例如,字符串:
汤姆(爱德华)去了店主(J. Guys,A。所有者和B. Ains)聚集的商店。这是一个美好的夜晚。
应该返回:
汤姆(Ed。)去了店主(J. Guys,A。所有者和B. Ains)聚集的商店。
然而,我发现使用懒惰的方法,我只得到:
汤姆(Ed。
而且,使用贪婪的方法,显然我得到了整个句子。并非所有句子都是这样构造的(例如,有些句子没有括号),我尝试使用否定查找,但我并不特别理解它。
任何人都知道如何继续?
答案 0 :(得分:1)
您可以在Java中使用此正则表达式来匹配不在圆括号内的句点:
(?=([^(]*\([^)]*")*[^)]*$)\.
要匹配整个Tom (Ed.) went down to the shop where the owners (J. Guys, A. Owner, and B. Ains) gathered.
句子,您可以使用
.*?(?=([^(]*\([^)]*")*[^)]*$)\.
看看demo。此外,在Java中,您将不得不双重转义斜杠:
String pattern = ".*?(?=([^(]*\\([^)]*")*[^)]*$)\\.";
答案 1 :(得分:0)
您可以使用以下内容:
[^().]*\([^)]*\)[^().]*
此模式包含3部分:
2部分[^().]*
将匹配除()
和点
和\([^)]*\)
将括号与内容匹配。