我在python中有一个包含几千个地址的字符串,如下所示:
'123 Chestnut Way 4567 Oak Lane 890 South Pine Court'
将此长字符串拆分为单独地址的最简单方法是什么?我尝试编写一个程序,该程序基于47 < ord(i) < 58
的行中的3个或4个字符进行拆分,但我遇到了麻烦。
答案 0 :(得分:3)
假设所有地址都与给定的地址相同,您可以使用re.findall
:
>>> from re import findall
>>> string = '123 Chestnut Way 4567 Oak Lane 890 South Pine Court'
>>> findall("\d+\D+(?=\s\d|$)", string)
['123 Chestnut Way', '4567 Oak Lane', '890 South Pine Court']
>>>
上面使用的所有正则表达式语法都解释为here,但下面是一个快速细分:
\d+ # One or more digits
\D+ # One or more non-digits
(?= # The start of a lookahead assertion
\s # A space
\d|$ # A digit or the end of the string
) # The end of the lookahead assertion
答案 1 :(得分:1)
你可以很容易地用正则表达式做到这一点,
import re
txt = '123 Chestnut Way 4567 Oak Lane 890 South Pine Court'
re.findall( r'\d+', txt )
最后一个将返回所有数字运行,
['123', '4567', '890']
然后您可以使用该信息来解析字符串。有很多方法,但你可以找到原始字符串中的数字索引,并在其间获取文本。你也可以让regeular表达更高级。以下内容将匹配任意数量的数字,后跟一个空格,后跟任意数量的非数字(包括空格)
re.findall( r'\d+ \D+', txt )
并将返回,
['123 Chestnut Way ', '4567 Oak Lane ', '890 South Pine Court']