我试图只匹配一系列地址中的街道名称。地址可能如下所示:
23桶路。
14 老磨坊博士
65-345 霍华德的虚张声势
我想使用正则表达式来匹配“Barrel”、“Old Mill”和“Howard's”。我需要弄清楚如何排除最后一个词。到目前为止,我有一个排除数字的后视方法,我可以使用以下方法包含单词和空格以及“'”:
(?<=\d\s)(\w|\s|\')+
如何排除最后一个词(可能以句点结尾,也可能不以句点结尾)?我想我应该使用前瞻,但我不知道如何制定它。
我试图只匹配一系列地址中的街道名称。地址可能如下所示:
23桶路。
14 老磨坊博士
65-345 霍华德的虚张声势
我想使用正则表达式来匹配“Barrel”、“Old Mill”和“Howard's”。我需要弄清楚如何排除最后一个词。到目前为止,我有一个排除数字的后视方法,我可以使用以下方法包含单词和空格以及“'”:
(?<=\d\s)(\w|\s|\')+
如何排除最后一个词(可能以句点结尾,也可能不以句点结尾)?我想我应该使用前瞻,但我不知道如何制定它。
我相信你想要的前瞻是(?=\s\w+\.?$)
.
\s
:您不想包含最后一个空格
\w
:至少一个单词字符(AZ、az、0-9 或 '_')
\.?
:可选句点(对于“St.”等缩写词)
$
:确保这是最后一个字
如果有可能在换行符之前可能有额外的空格,只需将其更改为(?=\s\w+\.?\s*$)
.
您不需要对此进行回顾:
/^[-\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"
另一种选择是使用split()
大多数脚本语言中提供的功能。这是您想要的 Python 版本:
stname = address.split()[1:-1]
(这address
是原始地址行,stname
是街道名称,即您要提取的内容。)