代码之家  ›  专栏  ›  技术社区  ›  Cristian E. Nuno

正则表达式:拆分字符串时如何保留所有数字?

  •  1
  • Cristian E. Nuno  · 技术社区  · 6 年前

    问题

    sample.text 分为两个元素:一个是数字,一个是文本。

    这个正则表达式- \\d\\s{1} -内部 base::strsplit() 删除最后一个数字。下面是我的尝试,以及我想要的输出。

    # load necessary data -----
    sample.text <-
      c("111110 Soybean Farming", "0116 Soybeans")
    
    # split string by digit and one space pattern ------
    strsplit(sample.text, split = "\\d\\s{1}")
    # [[1]]
    # [1] "11111"           "Soybean Farming"
    # 
    # [[2]]
    # [1] "011"      "Soybeans"
    
    # desired output --------
    # [[1]]
    # [1] "111110"           "Soybean Farming"
    # 
    # [[2]]
    # [1] "0116"      "Soybeans"
    
    # end of script #
    

    有什么建议吗 示例.text 保留所有数字将不胜感激!非常感谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   CertainPerformance    6 年前

    因为你要分手了 \\d ,数字是

    strsplit(sample.text, split = "(?<=\\d) ", perl=TRUE)
    

    http://rextester.com/GDVFU71820

        2
  •  1
  •   krads    6 年前

    一些替代解决方案,在第一次出现空间时使用非常简单的模式匹配:

    1) 间接使用 sub 替换你自己的定界符 strsplit 在分隔符上:

    strsplit( sub(' ', ';', sample.text), split=';')
    

    2) 使用 regexpr regmatches

    您可以有效地匹配第一个“”(空格字符),并按如下方式拆分:

    regmatches(sample.text, regexpr(" ", sample.text), invert = TRUE)
    

    结果是一个列表,如果这是您所追求的每一个样本所需的输出:

    [[1]]
    [1] "111110"          "Soybean Farming"
    
    [[2]]
    [1] "0116"     "Soybeans"
    

    library(stringr)
    str_split_fixed(sample.text, " ", 2)  #outputs a character matrix
    
         [,1]     [,2]             
    [1,] "111110" "Soybean Farming"
    [2,] "0116"   "Soybeans"