提取物使用Python对来自不同格式的字符串的数据进行分类

时间:2014-11-05 15:27:25

标签: python regex

我正在使用的数据是包含城市,州和邮政编码的字符串,遗憾的是,它们的格式并不完全相同。我的目标是最终得到三个字符串: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来识别中断的位置。虽然我相信我最终可以使这种方法有效,但它不是很干净,也不能很好地处理额外的空间。

有没有更好的方法来处理这项任务?

0 个答案:

没有答案