【问题标题】:How to extract all text before first numeric character only in R如何仅在R中提取第一个数字字符之前的所有文本
【发布时间】:2019-10-09 12:26:39
【问题描述】:

我有一个变量 x,它是一系列字符,例如:

"W1W", "BT3", "BS5", "E1W", "B68"

由此我需要提取第一个数字字符之前的字符以获取例如

"W", "BT", "BS", "E", "B"

我曾尝试查看以前的问题并发现:

gsub("[^a-zA-Z]", "", x)

但这会将文本字符保留在数字字符之后并导致:

"WW", "BT", "BS", "EW", "B"

有没有办法只获取数字字符之前的前导文本字符,然后删除所有内容?

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:
    x <- c("W1W", "BT3", "BS5", "E1W", "B68")
    
    library(stringr)
    
    str_extract(x, "^\\D+")
    
    # [1] "W"  "BT" "BS" "E"  "B" 
    

    【讨论】:

      【解决方案2】:

      使用来自base Rregmatches/regexpr

      regmatches(x, regexpr("\\D+(?=\\d)", x, perl = TRUE))
      #[1] "W"  "BT" "BS" "E"  "B" 
      

      数据

      x <- c("W1W", "BT3", "BS5", "E1W", "B68")
      

      【讨论】:

        【解决方案3】:

        在最后的注释中使用x,删除从第一个数字开始的所有内容:

        sub("\\d.*", "", x)
        ## [1] "W"  "BT" "BS" "E"  "B" 
        

        注意

        x <- c("W1W", "BT3", "BS5", "E1W", "B68")
        

        【讨论】:

          【解决方案4】:

          你可以使用

          sub("^(\\D+).*", "\\1", x)
          

          如果必须有数字并且数字可以在开头(然后您需要空值),请使用

          sub("^(\\D*)\\d.*", "\\1", x)
          

          查看regex demoregex demo #2

          正则表达式匹配

          • ^ - 字符串开头
          • (\D*) - 0+ 非数字符号
          • \d - 一个数字
          • .* - 字符串末尾的任何 0+ 个字符

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-11-28
            • 1970-01-01
            • 2021-01-27
            • 1970-01-01
            • 1970-01-01
            • 2021-09-01
            • 2021-08-31
            相关资源
            最近更新 更多