【问题标题】:Extract last word in string in R在R中提取字符串中的最后一个单词
【发布时间】:2013-07-15 15:41:33
【问题描述】:

提取句子字符串中最后一个单词的最优雅的方法是什么?

句子不以“.”结尾 单词之间用空格隔开。

sentence <- "The quick brown fox"
TheFunction(sentence)

应该返回:“狐狸”

如果一个简单的解决方案是可能的,我不想使用一个包。 如果存在基于包的简单解决方案,也可以。

【问题讨论】:

  • 请给我们一些有关您的数据结构的详细信息,否则,我们只是在试图帮助您的过程中陷入困境。
  • 你试过什么?我想你可以反转字符串并用" "分隔。

标签: r


【解决方案1】:

仅出于完整性考虑:库 stringr 包含一个用于解决此问题的函数。

library(stringr)

sentence <- "The quick brown fox"
word(sentence,-1)
[1] "fox"

【讨论】:

    【解决方案2】:
    tail(strsplit('this is a sentence',split=" ")[[1]],1)
    

    基本上按照@Señor O 的建议。

    【讨论】:

    • 我很难用[[ 优雅地调用一个方法 :) 但这可能是我对 R 列表的个人感觉
    【解决方案3】:
    x <- 'The quick brown fox'
    sub('^.* ([[:alnum:]]+)$', '\\1', x)
    

    这将捕获字符串末尾之前的最后一个数字和字符字符串。

    您也可以使用regexecregmatches 函数,但我发现sub 更干净:

    m <- regexec('^.* ([[:alnum:]]+)$', x)
    regmatches(x, m)
    

    请参阅?regex?sub 了解更多信息。

    【讨论】:

    • 我会说 Roland 对这个特定问题的解决方案要简单得多,但是您的代码为进行各种有针对性的提取提供了一个很好的模板。
    • 如果你想让语法更短,你可以省略^sub 将自己从开头开始)并将[[:alnum:]]替换为\\w跨度>
    • @eddi 好点。但是,我喜欢尽可能明确地使用正则表达式,并且只在我发现我错过的情况时进行概括,而不是试图找到我过度匹配的情况。
    • 如果我们提取最后 N 个单词,而不仅仅是最后一个单词,正则表达式会是什么样子?
    • 感谢您提供干净、基本的 R 答案。我想学习正则表达式,而不仅仅是一些聪明的包装!!
    【解决方案4】:

    另一个打包选项是来自stringi 包的stri_extract_last_words()

    library(stringi)
    
    stri_extract_last_words("The quick brown fox")
    # [1] "fox"
    

    该功能还会删除可能位于句子末尾的任何标点符号。

    stri_extract_last_words("The quick brown fox? ...")
    # [1] "fox"
    

    【讨论】:

      【解决方案5】:

      往包的方向走,这是我能想到的最简单的答案:

      library(stringr)
      
      x <- 'The quick brown fox'
      str_extract(x, '\\w+$')
      #[1] "fox"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 2022-12-18
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多