我需要添加一个正则表达式
^\d*(?: ?\d+ ?[&\/-] ?\d+)? +([\w.]+(?: +\w+)*) *
我本质上是试图从地址中解析出门号,但是我遇到了没有门号而只有街道名的数据。在这种情况下,我想返回街道名称,但是我当前的正则表达式与之不正确匹配。我需要在上面的链接中通过最后一行。
2 Main Street -> 'Main Street'
5 & 6 Shore Lane -> 'Shore Lane'
7/8 Bay Way -> 'Bay Way'
73-97 Park Dr E -> 'Park Dr E'
2781 Boyle Street -> 'Boyle Street'
267 1/2 Brad St -> 'Brad St'
433 W. 49th St. -> 'W 49th St'
One Building Road -> 'One Building Road'
答案 0 :(得分:1)
尝试将街道编号和街道名称之间的间距移到可选的第一组中。
^\d*(?: ?\d+ ?[&\/-] ?\d+ +)?([\w.]+(?: +\w+)*) *
将+
部分移到该组中。更改:
...\d+)? +(...
收件人:
...\d+ +)? (...
答案 1 :(得分:1)
如果之前的所有内容都是可选的,则无需使用[ ]+
。
^\d*(?:[ ]?\d+[ ]?[&\/-][ ]?\d+)?[ ]*([\w.]+(?:[ ]+\w+)*)
https://regex101.com/r/EiNNaz/1
但是,如果您需要在可选的门牌号
之间进行分隔
和街道名称,您必须获得一点创意。
将街道名称的首字母限制为非数字字词[^\W\d]
并在其前使用空格 Boundary (?<!\S)
。
因此,一切都很好
^\d*(?:[ ]?\d+[ ]?[&\/-][ ]?\d+)?[ ]*((?<!\S)[^\W\d][\w.]*(?:[ ]+\w+)*)
https://regex101.com/r/PsJled/1
这个人可读的正则表达式是
^
\d*
(?: [ ]? \d+ [ ]? [&\/-] [ ]? \d+ )?
[ ]*
( # (1 start)
(?<! \S )
[^\W\d]
[\w.]*
(?: [ ]+ \w+ )*
) # (1 end)
还有一个您可以尝试的宽松版本
https://regex101.com/r/xasb3S/1
答案 2 :(得分:0)
(^[\s&/\-1-9]+){0,1}(.*)
然后定位第2个子组