代码之家  ›  专栏  ›  技术社区  ›  JasonAizkalns

基于一个或多个单词后跟两个数值的regex将字符串拆分为多行

  •  0
  • JasonAizkalns  · 技术社区  · 7 年前

    给出这样的字符串:

    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
    

    是“奥尔巴尼城”给我带来了麻烦。还有其他单词也将包含一个或多个单词(例如“port jervis city”),但是,这些单词后面应该始终跟长度为1或更多的数值。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Andre Elrico    7 年前

    你可以使用 ?strsplit 从正常R

    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

        2
  •  2
  •   mrzasa    7 年前

    你可以使用 str_extract_all 在带有regex的字符串中查找所有regex匹配项:

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

    Demo

    说明:

    • [A-Za-z ]+ 匹配由空格分隔的任意数量的单词
    • (\s\d+)+ 数字以空格分隔
    • \s? 最终(可能)空白