我正在使用的数据是包含城市,州和邮政编码的字符串,遗憾的是,它们的格式并不完全相同。我的目标是最终得到三个字符串:city,st,zip。
虽然大多数行(40K +记录)都有逗号将城市与州分开,但有些则没有。更糟糕的是,有些行有逗号,但是city和zip之间没有空格(可能包含5或9位数字)。有些城市有不止一个字。以下是涵盖所有三种情况的示例:
samples = ["Green River Washington 98100-1111", "Spokane, WA 98222", "Riverton,UTAH 84065"]
我发现的一个一致性是邮政编码始终是最后一个,并且在它之前似乎总是有一个空格。使用这个和re.findall
,我相信我正在令人满意地提取邮政编码(我现在正在保留原始字符串)。但是,我无法理解如何处理城市和州。
我的测试代码:
for str in samples:
if ',' in str:
print str.split(',')[-1]
else:
it = re.finditer(r'\b[ ,][\w]*', str)
for match in it:
print "'{g}' was found between the indices {s}".format(g=match.group(), s=match.span())
如果确实存在逗号,我正试图利用它。如果逗号不存在,我正在尝试使用re.finditer
来识别中断的位置。虽然我相信我最终可以使这种方法有效,但它不是很干净,也不能很好地处理额外的空间。
有没有更好的方法来处理这项任务?