【问题标题】:Regular expression to split a street address that may have optional numbers with slash or hyphen in between at the end用于拆分街道地址的正则表达式,该街道地址可能在末尾带有斜线或连字符的可选数字
【发布时间】:2019-04-20 15:21:02
【问题描述】:

我尝试读取街道地址并使用正则表达式拆分街道和号码。

地址可能如下所示:

Ebory Mebory Street 1
Eborymebory Street 23/2
Filler Filler Filler Street 1-32

我尝试使用split() 拆分字符串,然后再次将街道名称放在一起(如果拆分后的字符串中没有检测到数字)。

这仅适用于第一种情况。我认为如果我使用正则表达式会更好。问题是我对正则表达式的理解非常有限。

adress = "Ebory mebory Street 23".split()
street = ""
number = ""
for item in adress:
  if(not(item.isdigit())):
     street = street + item + " "
  else:
     number = item

我得到的结果是正确的,但仅适用于这种情况。如果地址是Eborymebory Street 23/24,则由于斜线而无法使用。

那么,问题是如何获取街道地址和字符串末尾的数字,记住这些数字可能是可选的?

【问题讨论】:

  • 我不认为这是重复的......在这两种情况下都没有相同的模式。
  • 您尚未说明如何 拆分地址。请编辑您的问题以提供示例输入和相应的预期输出。
  • @Bohemian 嗨,我修改了问题标题和正文以包含详细信息。我认为从尝试和样本输入中可以清楚地看到。如果您认为它应该保持关闭,很抱歉打扰。

标签: regex python-3.x


【解决方案1】:

你可以使用像这样的正则表达式

(.*?)\s*(\d+(?:[/-]\d+)?)?$

查看regex demoRegulex demo

详情

  • (.*?) - 捕获组 1:除换行符之外的任何 0+ 字符,尽可能少
  • \s* - 0+ 个空格
  • (\d+(?:[/-]\d+)?)? - 一个可选的捕获组 2:1+ 位,然后是 /- ([/-]) 的可选序列,后跟 1+ 位
  • $ - 字符串结束。

查看Python demore.match(它使模式只匹配字符串的开头):

import re
addresses = ["Ebory Mebory Street 1",
    "Eborymebory Street 23/2",
    "Filler Filler Filler Street 1-32",
    "Filler Filler Filler Street"]
for address in addresses:
    street = ""
    number = ""
    m = re.match(r"(.*?)\s*(\d+(?:[/-]\d+)?)?$", address)
    if m:
        street, number = m.groups()
        if not number:
            number = ""
        print("Address: {}\nStreet: {}\nNumber: {}".format(address, street, number))

输出:

Address: Ebory Mebory Street 1
Street: Ebory Mebory Street
Number: 1
Address: Eborymebory Street 23/2
Street: Eborymebory Street
Number: 23/2
Address: Filler Filler Filler Street 1-32
Street: Filler Filler Filler Street
Number: 1-32
Address: Filler Filler Filler Street
Street: Filler Filler Filler Street
Number: 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多