根据一个或多个单词的正则表达式后跟两个数字值将字符串分成几行

时间:2018-11-15 14:20:53

标签: r regex

给出这样的字符串:

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或更大的数字值。

2 个答案:

答案 0 :(得分:2)

您可以使用str_extract_all在带有正则表达式的字符串中查找所有正则表达式匹配项:

[A-Za-z ]+(\s\d+)+\s?

Demo

说明:

  • [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"

了解更多吗?:

https://regex101.com/r/7cUESK/1