我有一个正则表达式(?<=\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
部分?
答案 0 :(得分:0)
答案 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;字符串捕获。