正则表达式用于匹配结构化地址

时间:2019-05-06 21:38:31

标签: regex

我需要添加一个正则表达式

regex

^\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'

3 个答案:

答案 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个子组

相关问题