我正在处理字符串形式的地址数据,我只想提取邮政编码。它们始终位于字符串末尾,但长度可以不同(例如“ XXX XXX”或“ XX XXX”或“ XXXX XXX”)。 它们前面也始终有“ \ n”-但这在字符串中又发生了几次。我认为理想的解决方案是提取最后一个“ \ n”之后的所有数据,但是我不知道该怎么做!我可以找到截断特定字符后的数据的方法,但是如果该字符出现几次,则找不到。
字符串示例:
"22 Generic Road,\nNotville,\nFaketon,\nUnited Kingdom,\nAB1 2CD"
编辑添加: 我的解决方法是分两个步骤进行处理:首先,将字符串截断为最后11个字符(以确保获得全部邮政编码和所有列的\ n);其次,提取\ n之后的所有字符。但这大概是不必要的麻烦。
答案 0 :(得分:2)
这就是您所期望的,在这种情况下,有很多解决方法,gsub
是其中一种,您也可以使用str_extract
中的stringr
或{{ 1}}(来自Base R):
gregexpr
逻辑:
使用\ w选择最后一个字母数字词,因为存在多个,因此使用贪婪字符+(一个或多个匹配项),因为它出现在句子的末尾,所以请使用“ $”使其生效,匹配模式是一个单词,另一个单词之间用空格隔开,因此,有两个\ w +和一个\ s +表示空格。将这些匹配项包装在一个捕获组中(使用括号将其用于捕获该匹配项),然后用该捕获组替换整个匹配项,即可得出结果。
使用 gsub("(.*)\n(\\w+\\s+\\w+)$","\\2", x)
stringr::str_extract
输出:
stringr::str_extract(x, "(\\w+\\s+\\w+)$")
输入数据:
> gsub("(.*)\n(\\w+\\s+\\w+)$","\\2", x)
[1] "AB1 2CD"