平衡不情愿和贪婪的匹配

时间:2016-04-14 03:54:48

标签: java regex regex-greedy non-greedy

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

2320 ZINER CIR East 43123
1111 ZINER CIR East Bernstadt 43123

我的正则表达式是使用城市名称建立的,而东伯恩斯塔特是城市名称。然而,街道也可以在东部"结束。我的困境是,如果我贪婪匹配"东",如:

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

...然后只匹配第一条线(另一条是部分匹配)。如果我使用不情愿的匹配,例如:

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

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

如何更改正则表达式以使两行完全匹配? "东"和#34;东伯恩施塔特"必须保留在表达式的不同部分。

编辑:我无法对待" East"和#34;东伯恩施塔特"有一个括号组;上面的两个表达式必须匹配,但也是" 1234 Ziner CIR East East Bernstadt"必须匹配(一些街道上有一些主要方向)。

1 个答案:

答案 0 :(得分:1)

试试这个

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

Regex demo

<强>解释
\s:“空格字符”:空格,制表符,换行符,回车符,垂直制表符sample
\S\S sample定义的一个不是空白字符的字符
(?!…):否定前瞻sample