从不一致放置的重复字符中截断r中的字符串

问题描述 投票:2回答:1

我正在处理字符串中的地址数据,我想只提取邮政编码。这些始终位于字符串的末尾,但可以是不同的长度(例如,“XXX XXX”或“XX XXX”或“XXXX XXX”)。他们之前也一直有“\ n” - 但这在字符串中发生了几次。我认为理想的解决方案是提取最终“\ n”之后的所有数据,但我不知道该怎么做!我可以找到在特定字符后截断数据的方法,但是如果该字符出现多次则不会。

字符串示例:

"22 Generic Road,\nNotville,\nFaketon,\nUnited Kingdom,\nAB1 2CD"

编辑添加:我的解决方法是分两步:首先,将字符串截断为最后11个字符(以确保获得总邮政编码和\ n为所有列);第二步,提取\ n后的所有字符。但可能这是不必要的麻烦。

r substring
1个回答
2
投票

这是你所期望的,在这种情况下有很多方法可以解决这个问题,gsub就是其中之一,你可以使用str_extractstringr或者来自Base R的gregexpr

gsub("(.*)\n(\\w+\\s+\\w+)$","\\2", x)

逻辑:

使用\ w选择最后一个字母数字单词,因为有多个因此使用+(一个或多个匹配)的贪婪字符,因为它出现在句子的结尾处使用“$”使其工作,模式匹配是一个用空格分隔的单词,因此对于空格有两个\ w +和一个\ s +。将这些匹配包装在捕获组中(使用括号,这些匹配用于捕获匹配)并将整个匹配替换为此捕获组,从而为我们提供结果。


使用stringr::str_extract

stringr::str_extract(x, "(\\w+\\s+\\w+)$")

输出:

> gsub("(.*)\n(\\w+\\s+\\w+)$","\\2", x)
[1] "AB1 2CD"

输入数据:

x <- "22 Generic Road,\nNotville,\nFaketon,\nUnited Kingdom,\nAB1 2CD"
© www.soinside.com 2019 - 2024. All rights reserved.