【发布时间】:2021-12-20 15:38:13
【问题描述】:
我正在尝试更正地址数据,其中街道地址和城市/城镇信息被附加而没有空格。
识别分割点的最简单方法是查找道路类型(例如 STREET、ST.),后跟一个单词,例如:
1201 WEST FRONT STREETCHESTER PA 19013-3496
但是,在其他单词(例如 SOUTH)上会出现一些拆分。我们暂时不需要检测这些。
703 6TH STREET SOUTHTEXAS CITY TX 77590
以下正则表达式,
(ST(?:REET)?)\.?([A-Z]{3,})
适用于大多数示例,但在第二个示例中将匹配 ST REET。 IIRC 正则表达式默认是贪婪的,所以我不明白为什么会这样。我的理解是第一个捕获组应该防止第二个捕获组触发。我尝试将正则表达式重写为(STREET|ST)\.?([A-Z]{3,}),但这并没有改变任何东西。
是否有任何方法可以帮助重写正则表达式或编译标志?
解决方案
对于那些感兴趣的人,使用 Michal 的正则表达式作为起点,我使用的最终正则表达式是:
\s((?:(?!STREET|STATE)ST|STREET|LANE|LN|(?!DRIVE)DR|DRIVE|ROAD|RD|[0-9]+|(?!AVENUE)AVE|AVENUE|BOULEVARD|BLVD|HWY|HIGHWAY|WEST|EAST|(?!NORTHEAST|NORTHWEST)NORTH|(?!SOUTHEAST|SOUTHWEST)SOUTH|N\.|S\.|W\.|E\.)\.?)(?=[A-Z]{3,})
它为 EPA 的 TSCA 数据处理街道、车道、车道、大道、林荫大道、高速公路和主要方向的拆分。
【问题讨论】:
标签: python regex street-address