java - 平衡不情愿和贪婪的匹配

标签 java regex regex-greedy non-greedy

我正在尝试匹配下面的两个地址行(大部分是虚构的地址):

2320 ZINER CIR East 43123
1111 ZINER CIR East Bernstadt 43123

我的正则表达式是使用城市名称构建的,East Bernstadt 是一个城市名称。但是,街道也可以以“东”结束。我的困境是,如果我贪婪地匹配“East”,如下所示:

\d+ [^ ]+ CIR( East)?( East Bernstadt)?(?: \d+)?

...那么只有第一行被匹配(另一行是部分匹配)。如果我使用不情愿的匹配,如下所示:

\d+ [^ ]+ CIR( East)??( East Bernstadt)?(?: \d+)?

...第二行匹配但不匹配第一行。

如何更改正则表达式以使两行完全匹配? “East”和“East Bernstadt”必须保留在表达式的不同部分中。

编辑:我不能用一个括号组来处理“East”和“East Bernstadt”;上面的两个表达式必须匹配,而且“1234 Ziner CIR East East Bernstadt”也必须匹配(有些街道上有基本方向)。

最佳答案

试试这个

\d+\s+\S+\s+CIR(?:(?!\sEast Bernstadt)\s+East)?(?:\s+East Bernstadt)?(?: +\d+)?

Regex demo

说明:
\s: “空白字符”:空格、制表符、换行符、回车符、垂直制表符 sample
\S:不是 \S sample 定义的空白字符的一个字符
(?!...):负向前瞻 sample

关于java - 平衡不情愿和贪婪的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613597/

相关文章:

c# - 电子邮件地址用 C#、正则表达式隐藏一些字符

python Regex-根据条件获取匹配

javascript - jquery 从格式 01/02/2010 的日期开始 trim 前导零

javascript - 正则表达式,用于匹配包含一个单词但不包含另一个单词的URL

Java 匿名类和垃圾收集器

java - 使用 Maven 的安全性如何?

JavaME(PBP): How do I rotate text?

ruby 正则表达式查找嵌套匹配项

python - 用于匹配 URL 和失败的非 URL 的正则表达式

java - Spring CSRF token 生命周期