给出这样的字符串:
x <- c("Carroll 103 215 Albany City 24 41 Allegany 115 231 Charlotte 116 248")
将其分成如下几行的最佳方法是什么:
# [1] Carroll 103 215
# [2] Albany City 24 41
# [3] Allegany 115 231
# [4] Charlotte 116 248
给我带来麻烦的是“阿尔巴尼市”。还有其他单词将包含一个或多个单词(例如“杰维斯港城”),但是,这些单词后均应始终带有长度为1或更大的数字值。
答案 0 :(得分:2)
您可以使用str_extract_all
在带有正则表达式的字符串中查找所有正则表达式匹配项:
[A-Za-z ]+(\s\d+)+\s?
说明:
[A-Za-z ]+
匹配由空格分隔的任意数量的单词(\s\d+)+
数字用空格隔开\s?
最终(可能)空白答案 1 :(得分:2)
您可以从普通R中使用?strsplit
strsplit(x, "(?<=\\d)\\s(?=[A-Za-z])", perl = T)[[1]]
或
strsplit(x, "(?<=\\d)\\s(?=\\D)", perl = T)[[1]] # less explizit, but much cooler
两者都
#[1] "Carroll 103 215" "Albany City 24 41" "Allegany 115 231" "Charlotte 116 248"
数据:
x = "Carroll 103 215 Albany City 24 41 Allegany 115 231 Charlotte 116 248"
了解更多吗?: