我正在尝试仅匹配来自一系列地址的街道名称。地址可能如下所示:
23 Barrel Rd。
14老磨坊博士。65-345 Howard's Bluff
我想用正则表达式来匹配“Barrel”,“Old Mill”和“Howard's”。我需要弄清楚如何排除最后一个字。到目前为止,我有一个lookbehind排除数字,我可以包括单词和空格和“'”使用这个:
(?<=\d\s)(\w|\s|\')+
如何排除最后一个单词(可能会或可能不会在一段时间内结束)?我想我应该使用前瞻,但我无法弄清楚如何制定它。
答案 0 :(得分:0)
我相信你想要的前瞻是(?=\s\w+\.?$)
。
\s
:您不想包含最后一个空格
\w
:至少一个单词字符(A-Z,a-z,0-9或'_')
\.?
:可选期间(缩写为“St.”)
$
:确保这是最后一句话
如果在换行符之前可能存在其他空格,则只需将其更改为(?=\s\w+\.?\s*$)
。
答案 1 :(得分:0)
你不需要这样做:
/^[-\d]+ ([\w ']+) \w+\.?$/
示例Ruby实现:
regex = /^[-\d]+ ([\w ']+) \w+\.?$/
tests = [ "23 Barrel Rd.", "14 Old Mill Dr.", "65-345 Howard's Bluff" ]
tests.each do |test|
p test.match(regex)[1]
end
输出:
"Barrel"
"Old Mill"
"Howard's"
答案 2 :(得分:0)
为什么不匹配你想要的?如果我理解得很好,你需要在数字后面的所有单词中排除最后一个单词。单词由空格分隔,因此只需获取数字和最后一个空格之间的所有内容。
\d+(?:-\d+)? ((?:.)+)
注意:最后有一个空格。
Tha将以1次N次结束你想要的东西。
如果您只想匹配确切的文字,可以使用\K
(不是每个正则表达式引擎都支持),但是:Example
使用正则表达式\d+(?:-\d+)? \K.+(?= )
答案 3 :(得分:0)
另一种选择是使用大多数脚本语言中提供的split()
函数。这是您想要的Python版本:
stname = address.split()[1:-1]
(此处address
是原始地址行,stname
是街道的名称,即您要提取的内容。)