R(正则表达式)- 从地址末尾删除公寓、单元和其他词

R (regex) - removing apartment, unit, and other words from end of address

我有一个大型地址数据集,我计划在 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

主要挑战包括

  1. ST 既用于缩写街道,又用于表示街道名称中的 "SAINT"。
  2. 地址以许多不同的指示符结尾,例如 STREETAVENUE
  3. 有些交叉点(用 & 表示)可能包括两次 STAVENUE 等指标。

使用 R,我试图应用 sub() 函数来解决问题,但我没有成功。下面是我最近的尝试。

sub("(.*)ST","\1",df$Address,perl=T)

我知道很多问题都会问类似的问题,但 none 直接解决了这个问题,我怀疑它与其他用户相关。

虽然我觉得删除最后一个词应该对你有用,但为了更安全一点,你可以使用这个正则表达式来保留你想要的东西,并以更安全的方式丢弃你不需要的东西。

(.*(?:ST|AVENUE|STREET)\b).*

在这里,.*(?:ST|AVENUE|STREET)\b 通过以贪婪的方式从头开始捕获所有内容来捕获您的预期数据,并且仅在遇到任何这些词 ST 或 AVENUE 或 STREET(即这些词的最后一次出现)时停止,以及无论什么在那之后,将被丢弃,这就是你想要的。在您当前的情况下,您只有一个词,但它可以丢弃多个词,或者实际上是在这些特定词之后出现的任何内容。预期数据在第 1 组中捕获,因此只需将其替换为 </code></p> <p>所以不是这个,</p> <pre><code>sub("(.*)ST","\1",df$Address,perl=T)

试试这个,

sub("(.*(?:ST|AVENUE|STREET)\b).*","\1",df$Address,perl=T)

See this demo