我尝试读取街道地址并用正则表达式分割街道和号码。
该地址可以如下所示:
Ebory Mebory Street 1
Eborymebory Street 23/2
Filler Filler Filler Street 1-32
Run Code Online (Sandbox Code Playgroud)
我尝试拆分字符串使用split(),然后再次将街道名称放在一起(如果在拆分字符串中没有检测到数字)。
这仅适用于第一种情况。我认为如果我使用正则表达式会更好。问题是我对正则表达式的理解非常有限。
adress = "Ebory mebory Street 23".split()
street = ""
number = ""
for item in adress:
if(not(item.isdigit())):
street = street + item + " "
else:
number = item
Run Code Online (Sandbox Code Playgroud)
我得到的结果是正确的,但仅限于这种情况。如果地址是Eborymebory Street 23/24,则由于斜杠而无法工作。
那么,问题是如何获取街道地址以及字符串末尾的数字,并记住这些数字可能是可选的?
您可以使用正则表达式,例如
(.*?)\s*(\d+(?:[/-]\d+)?)?$
Run Code Online (Sandbox Code Playgroud)
请参阅regex 演示和Regulex 演示:
细节
(.*?)- 捕获组 1:除换行符之外的任何 0+ 字符,尽可能少\s*- 0+ 空格(\d+(?:[/-]\d+)?)?- 可选捕获组 2:1 个以上数字,然后是可选的/or -( [/-]) 序列,后跟 1 个以上数字$- 字符串末尾。请参阅Python演示re.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))
Run Code Online (Sandbox Code Playgroud)
输出:
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:
Run Code Online (Sandbox Code Playgroud)