Python 按数字拆分字符串 space
Python Splitting string by number and space
嗨,有人可以帮帮我吗?我有很多包含地址的字符串,我需要将它们拆分以获取数组中的街道名称、门牌号和国家/地区。
像这样:
streetA 15, New York
street number 2 35, California
streetB 36B, Texas
进入:
['streetA','15','New York']
['street number 2','35','California']
['streetB','36B','Texas']
谢谢。
您可以使用正则表达式。
import re
regex = re.compile(r'^(.+) (\d+\w*), (.+)$')
m = regex.match('streetA 15, New York')
print m.groups()
# ('streetA', '15', 'New York')
m = regex.match('street number 2 35, California')
print m.groups()
# ('street number 2', '35', 'California')
这是一个example on regex101.
只需使用 .split(',')
获取国家(最后一项),然后在第一项中找到最后 space:
>>> l = 'street number 2 35, California'.split(',')
>>> index = l[0].rfind(' ')
>>> l = [l[0][:index]] + [l[0][index+1:]]+ [l[1].strip()]
>>> l
['street number 2', '35', 'California']
@Brendan Abel 解决方案很好,尽管它 returns 是一个元组而不是列表。
您可以使用 list()
函数将其转换为列表,这将匹配您的输出:
import re
regex = re.compile(r'^(.+) (\d+\w*), (.+)$')
m = regex.match('streetA 15, New York')
result=list(m.groups())
print result
# ['streetA', '15', 'New York']
您不需要使用 re.compile()
:
import re
def splitup(string):
match = re.search(" \d[^ ]*, ", string)
if match is None:
raise ValueError("Not a valid string: %r" % string)
street = string[:match.start()]
number = string[match.start(): match.end()].strip(", ")
state = string[match.end():]
return [street, number, state]
对于您的示例,它打印:
['streetA', '15', 'New York']
['street number 2', '35', 'California']
['streetB', '36B', 'Texas']
嗨,有人可以帮帮我吗?我有很多包含地址的字符串,我需要将它们拆分以获取数组中的街道名称、门牌号和国家/地区。
像这样:
streetA 15, New York
street number 2 35, California
streetB 36B, Texas
进入:
['streetA','15','New York']
['street number 2','35','California']
['streetB','36B','Texas']
谢谢。
您可以使用正则表达式。
import re
regex = re.compile(r'^(.+) (\d+\w*), (.+)$')
m = regex.match('streetA 15, New York')
print m.groups()
# ('streetA', '15', 'New York')
m = regex.match('street number 2 35, California')
print m.groups()
# ('street number 2', '35', 'California')
这是一个example on regex101.
只需使用 .split(',')
获取国家(最后一项),然后在第一项中找到最后 space:
>>> l = 'street number 2 35, California'.split(',')
>>> index = l[0].rfind(' ')
>>> l = [l[0][:index]] + [l[0][index+1:]]+ [l[1].strip()]
>>> l
['street number 2', '35', 'California']
@Brendan Abel 解决方案很好,尽管它 returns 是一个元组而不是列表。
您可以使用 list()
函数将其转换为列表,这将匹配您的输出:
import re
regex = re.compile(r'^(.+) (\d+\w*), (.+)$')
m = regex.match('streetA 15, New York')
result=list(m.groups())
print result
# ['streetA', '15', 'New York']
您不需要使用 re.compile()
:
import re
def splitup(string):
match = re.search(" \d[^ ]*, ", string)
if match is None:
raise ValueError("Not a valid string: %r" % string)
street = string[:match.start()]
number = string[match.start(): match.end()].strip(", ")
state = string[match.end():]
return [street, number, state]
对于您的示例,它打印:
['streetA', '15', 'New York']
['street number 2', '35', 'California']
['streetB', '36B', 'Texas']