正则表达式解析1个或多个字符串

时间:2016-09-16 18:14:24

标签: regex parsing

我有一个正则表达式(?<=\d\b)(.*)(?=ave),它只是找到 digits ave之间的字符串。示例:12234 dragon ave将显示为dragon

但是,我们假设某些地址具有可选E(east),W(west),S(south),N(north) or NE, SE等。示例122234 E dragon ave。我的正则表达式应该是什么样的,以便它只能再次解析dragon部分?

3 个答案:

答案 0 :(得分:0)

(?<=\d\b)\s*\S*\s(\S+)\s(?=ave)

您可以使用此类内容并抓住该群组。

参见演示。

https://regex101.com/r/jX1rN4/2

答案 1 :(得分:0)

你可以使用awk吗?

awk 'NF==4{ print $3 } NF==3{ print $2 }' </tmp/addresses.txt

这是addresses.txt的样子:

12345 E Dragon ave
13 diagonal ave
1235 West Cherrytree ave

请注意,这有局限性。例如,你将如何处理如下地址:

1235 West Cherry Tree ave

这让我想知道,你是否只想避免门牌号码,主要方向和街道/大道等?了解您的输入可能是重要的,因为这可以真正确定您的脚本可能是什么样的。

答案 2 :(得分:0)

另一个想法是捕捉数字之间的每个单词和#34; ave&#34;,就像这个正则表达式一样:

(?<=\d\b)(\s[a-zA-z]+\s)(.*)(?=[ave]*)

https://regex101.com/r/rU0lK1/3

修改

我看到你对vk关于有选择地捕获&#34; ave&#34;字符串,所以我已经更新了regex101 demo和&#34; ave&#34;字符串捕获。