使用 XML 包和 XPath 从网站上抓取地址,有时我只能得到一个嵌入了我想要的邮政编码的字符串。提取邮政编码很简单,但有时会显示其他五位数字的字符串。
以下是 df 中问题的一些变体。
zips <- data.frame(id = seq(1, 5), address = c("Company, 18540 Main Ave., City, ST 12345", "Company 18540 Main Ave. City ST 12345-0000", "Company 18540 Main Ave. City State 12345", "Company, 18540 Main Ave., City, ST 12345 USA", "Company, One Main Ave Suite 18540, City, ST 12345"))
下面是提取邮政编码(5 位数字和加 4 位数字)的 R 语句,但它被街道号码和套房号码的虚假邮政编码所欺骗(并且其他地址字符串中可能还有其他可能性)。
regmatches(zips$address, gregexpr("\\d{5}([-]?\\d{4})?", zips$address, perl = TRUE))
上一个 SO 问题的答案表明“正则表达式将返回最后一个连续的五位数字字符串。它使用负向前瞻来确保返回的字符串后不存在 5 位数字字符串。”
从地址字符串中提取邮政编码 https://stackoverflow.com/questions/21074812/extracting-a-zip-code-from-an-address-string
\b\d{5}\b(?!.*\b\d{5}\b)
但是这个问题和答案涉及 PHP 并提供了一个带有 preg_matches()` 的 if 循环,我不熟悉这些语言和工具,但这个想法可能是正确的。
我的问题:什么 R 代码会找到真正的邮政编码并忽略虚假的相似邮政编码?