我们主要在美国开展业务,并试图通过将所有地址字段组合到单个文本区域来改善用户体验.但是有一些问题:
显然,这是一个常见的问题:
有没有办法将地址与周围的文本隔离并将其分解成碎片?是否有正则表达式来解析地址?
使用 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"))
Run Code Online (Sandbox Code Playgroud)
下面是提取邮政编码(5 位和 4 位数字)的 R 语句,但它被街道号码和套房号的虚假邮政编码所欺骗(其他地址字符串中可能还有其他可能性)。
regmatches(zips$address, gregexpr("\\d{5}([-]?\\d{4})?", zips$address, perl = TRUE))
Run Code Online (Sandbox Code Playgroud)
对上一个 SO 问题的回答表明“正则表达式将返回最后一个连续的五位数字字符串。它使用负前瞻来确保在返回后没有 5 位数字字符串。”
从地址字符串中提取邮政编码
\b\d{5}\b(?!.*\b\d{5}\b)
Run Code Online (Sandbox Code Playgroud)
但是这个问题和答案涉及 PHP,并提供了一个带有 preg_matches()` 的 if 循环我不熟悉这些语言和工具,但这个想法可能是正确的。
我的问题:什么 …