繁体   English   中英

如何将街道名称与地址分开?

[英]How to separate street name from address?

我正在尝试使用正则表达式将街道名称以及街道类型(如 Rd.、Ave.、Blvd)与正则表达式分开,但是,我被卡住了。

例如,如果我输入'123 Main St.' ,我希望它返回: ['123', 'Main', 'St.'] 或者如果我输入'234 South 4th St.' ,我希望它返回: ['234', 'South 4th', 'St.']

我将如何实现这一目标? 这是我到目前为止:

re.split(r'(?<=\\d)(?:-\\d+)?\\s+', "23rd South 4th St.")

它返回: ['234', 'South 4th St.'] 但是,我正在尝试获得'St.' 也在一个单独的索引中。 有人可以帮我弄这个吗?

尝试这个:

import re
def split_address(address):
  return re.match(r'(\d+)\s(.*)\s(?<=\s)(.*)', address).groups()

split_address("123 Main St.") # ('123', 'Main', 'St.')
split_address("234 South 4th St.") # ('234', 'South 4th', 'St.')

这适用于您的两个具体示例,但请记住,您可能假设太多。

您可以使用

^(?P<number>\d+)(?:th|[rn]d|st)?\s+(?P<street_name>.*?)\s+(?P<street_type>\S+)$

请参阅正则表达式演示 细节:

  • ^ - 字符串的开始
  • (?P<number>\\d+) - 组“number”:一位或多位数字
  • (?:th|[rn]d|st)? - 匹配stndrdth的可选组
  • \\s+ - 1+ 个空格
  • (?P<street_name>.*?) - 组“steet_name”:除换行符以外的任何零个或多个字符,尽可能少
  • \\s+ - 1+ 个空格
  • (?P<street_type>\\S+) - 组“street_type”:一个或多个除空格以外的字符
  • $ - 字符串的结尾。

Python 演示

import re
text = "23rd South 4th St."
match = re.match(r'(?P<number>\d+)(?:th|[rn]d|st)?\s+(?P<street_name>.*?)\s+(?P<street_type>\S+)$', text)
if match:
  print(match.groupdict())
# => {'number': '23', 'street_name': 'South 4th', 'street_type': 'St.'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM