我有一个很大的地址数据集,我打算在ArcGIS中对地址进行地理编码(Google地理定位太昂贵了)。地址示例如下。
9999 ST PAUL ST BSMT
GARRISON BL & BOARMAN AVENUE REAR
1234 MAIN STREET 123
1234 MAIN ST UNIT1
ArcGIS无法识别末尾包含单位和其他字词的地址。所以我想删除这些词,使其看起来像下面的样子。
9999 ST PAUL ST
GARRISON BL & BOARMAN AVENUE
1234 MAIN STREET
1234 MAIN ST
主要挑战包括
ST
既用于缩写街道,又在街道名称中指示“ SAINT”。 STREET
和AVENUE
&
表示)可能包括两次类似ST
和AVENUE
的指示符。我正在使用R,尝试应用sub()
函数来解决问题,但没有成功。以下是我的最新尝试。
sub("(.*)ST","\\1",df$Address,perl=T)
我知道很多问题会问类似的问题,但是没有一个直接解决这个问题,我怀疑这与其他用户有关。
答案 0 :(得分:0)
尽管我觉得删除最后一个字应该对您有用,但是为了更加安全,您可以使用此正则表达式保留您想要的内容,并以更安全的方式丢弃您不需要的内容。
(.*(?:ST|AVENUE|STREET)\b).*
在这里,.*(?:ST|AVENUE|STREET)\b
通过以贪婪的方式捕获所有内容来捕获您想要的数据,并且只有在遇到任何这些单词ST或AVENUE或STREET(即这些单词的最后出现)以及之后出现的所有内容时,才停止那将被丢弃,这就是您想要的。在您当前的情况下,您只有一个单词,但是它可以丢弃多个单词,或者实际上丢弃那些特定单词之后发生的任何事情。目标数据已在组1中捕获,因此只需将其替换为\1
所以代替这个,
sub("(.*)ST","\\1",df$Address,perl=T)
尝试一下
sub("(.*(?:ST|AVENUE|STREET)\b).*","\\1",df$Address,perl=T)