[英]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)?
- 匹配st
、 nd
、 rd
或th
的可选组\\s+
- 1+ 个空格(?P<street_name>.*?)
- 组“steet_name”:除换行符以外的任何零个或多个字符,尽可能少\\s+
- 1+ 个空格(?P<street_type>\\S+)
- 组“street_type”:一个或多个除空格以外的字符$
- 字符串的结尾。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.