使用XML包和XPath从网站上抓取地址时,有时我只能得到一个包含所需邮政编码的字符串。提取邮政编码很简单,但有时会出现其他五位数的字符串。以下是在数据框中出现该问题的一些变体。
下面是提取邮政编码(包括5位数和4位数)的R语句,但它被街道号码和套房号码的伪邮政编码所欺骗(在其他地址字符串中可能还有其他可能性)。
一道之前的SO问题的答案建议使用正则表达式提取最后连续的五位数字字符串。它使用负向先行断言来确保在返回的字符串后面没有5位数字字符串。
从地址字符串中提取邮政编码
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位数字字符串。
从地址字符串中提取邮政编码
\b\d{5}\b(?!.*\b\d{5}\b)
但是那个问题和答案涉及PHP,并提供了一个带有preg_matches()的if循环。我不熟悉这些语言和工具,但这个想法可能是正确的。
我的问题:什么R代码可以找到真正的邮政编码并忽略假冒伪劣的?