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
主要挑战包括
ST
既用于缩写街道,又用于表示街道名称中的 "SAINT"。
- 地址以许多不同的指示符结尾,例如
STREET
和 AVENUE
- 有些交叉点(用
&
表示)可能包括两次 ST
和 AVENUE
等指标。
使用 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)
我有一个大型地址数据集,我计划在 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)
我知道很多问题都会问类似的问题,但 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)