【问题标题】:Obtain house number from street address从街道地址获取门牌号
【发布时间】:2018-05-02 08:15:52
【问题描述】:

设置

我有包含英国格式地址的字符串,例如address = '6A McCarthy Way'

我需要从地址中获取门牌号,例如house_number = '6A


当前代码

我有以下工作代码,

position = re.search('\d+', address).start()

if position == 0:
    for i in range(0,100000):    
        if address[position + i] != ' ':
            house_number = address[:position + i + 1]    
        else:
            break
else:
    house_number = address[position:]     

对于address = '6A McCarthy Way'address = 'McCarthy Way 6A',代码返回house_number = '6A'


问题

此代码假定

  • 门牌号将在address 的开头或结尾
  • 门牌号和地址将仅采用上述 2 种格式 - 例如从不address = '6A, McCarthy Way'address = '6 McCarthy Way'
  • address 中没有错误——例如从不address = '6AMcCarthy Way'

最后,即使假设适用于所有情况,我也不确定这是最 Pythonic 的方式。

如何改进代码?

【问题讨论】:

  • 一般来说,正则表达式不会捕捉到“错误”,因为它们的本质是期待某种模式。

标签: python regex string


【解决方案1】:

使用re.search

import re
address = '6A McCarthy Way' 
address2 = 'McCarthy Way 6A'
address3 = 'McCarthy Way 6AAAA'

print(re.search("(\d+\w*)", address).group())
print(re.search("(\d+\w*)", address2).group()) 
print(re.search("(\d+\w*)", address3).group())

输出:

6A
6A
6AAAA

【讨论】:

  • 感谢 Rakesh,就像一个魅力。但是,我忘记了一个重要的案例:address = '6 McCarthy Way'。如何编辑你的代码来处理这个问题? try '(\d+\w+)' except '(\d+)'?
  • @LucSpan,我猜(\d+\w*) 可以。
  • 只需r'\d\w*' 就足够了。或r'\b\d\w*'。或r'(?<!\S)\d\w*'
猜你喜欢
  • 2015-06-20
  • 1970-01-01
  • 2017-06-29
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多