模式或行尾之间的正则表达式匹配

时间:2016-12-01 20:58:26

标签: regex

我想在

上找到以下字符串
1234 foo bar
123 foo bar dr

这是我的模式

(?!\d)(\w.*)(?=\s(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|cir|trl|trail|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw+))/i

当它没有匹配的结尾如“dr”时,我似乎无法弄清楚如何匹配“foo bar”。我试过在没有任何运气的情况下在多个位置实现$

2 个答案:

答案 0 :(得分:1)

一种方法是使用可选的前瞻:

(?!\d)(\w.*)
(?=\s(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|cir|trl|trail|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw+)?)

在这里,您始终可以使用第一组,请参阅a demo on regex101(并注意不同的修饰符!)。

答案 1 :(得分:0)

对点上的街道类型使用负面预测:

(?<=\d )((?!\s(court|ct|street|st|drive|dr|<ETC>|vw)).)*

请参阅live demo

整场比赛(第0组)是您的目标输入。