【问题标题】:How do I get the first character of the last word in a string in R?如何获取 R 中字符串中最后一个单词的第一个字符?
【发布时间】:2022-12-18 07:52:32
【问题描述】:

所以我有一个名字列表,我想提取名字中最后一个单词的第一个字符。我可以得到最后一个词,但不是最后一个词的第一个字符。

species <- c("ACHILLEA MILLEFOLIUM VAR. BOREALIS", 
             "ACHILLEA MILLEFOLIUM VAR. MILLEFOLIUM", 
             "ALLIUM SCHOENOPRASUM VAR. SIBIRICUM")

#can get the last word
str_extract(data$species, "\\w+$")
[1] "BOREALIS"    "MILLEFOLIUM" "SIBIRICUM"

我想要的是 [1] “B” “M” “S”

【问题讨论】:

    标签: r regex stringr


    【解决方案1】:

    我们可以捕获非空白字符 (\S) 后跟一个或多个非空白字符 (\S+) 直到字符串的结尾 ($) 并替换为反向引用 (\1)捕获组

    sub(".*\s+(\S)\S+$", "\1", species)
    [1] "B" "M" "S"
    

    【讨论】:

      【解决方案2】:

      这可能不是最优雅的解决方案,但您始终可以第二次输入 string_extract() 以获取最后一个单词的第一个字符。

      
      library(stringr)
      species <- c("ACHILLEA MILLEFOLIUM VAR. BOREALIS", 
                   "ACHILLEA MILLEFOLIUM VAR. MILLEFOLIUM", 
                   "ALLIUM SCHOENOPRASUM VAR. SIBIRICUM")
      
      str_extract(species, "(\w+$)") |> 
        str_extract("^[A-Z]")
      
      [1] "B" "M" "S"
      
      

      【讨论】:

        【解决方案3】:

        使用 str_extract,您还可以在左侧断言空白边界并匹配后面的第一个单词字符,同时在字符串末尾断言可选的单词字符。

        如果你想匹配任何非空白字符,你也可以使用 \S 而不是 \w

        library (stringr)
        
        species <- c("ACHILLEA MILLEFOLIUM VAR. BOREALIS", 
                     "ACHILLEA MILLEFOLIUM VAR. MILLEFOLIUM", 
                     "ALLIUM SCHOENOPRASUM VAR. SIBIRICUM")
        
        str_extract(species, "(?<!\S)\w(?=\w*$)")
        

        输出

        [1] "B" "M" "S"
        

        请参阅R demo

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-04
          • 1970-01-01
          • 2013-09-07
          • 1970-01-01
          • 2012-11-24
          相关资源
          最近更新 更多