【问题标题】:How to get words that end with certain characters within each string r如何在每个字符串 r 中获取以某些字符结尾的单词
【发布时间】:2014-08-25 11:51:56
【问题描述】:

我有一个字符串向量,看起来像:

str <- c("bills slashed for poor families today", "your calls are charged", "complaints dept awaiting refund")

我想获取所有以字母s 结尾的单词并删除s。我试过了:

gsub("s$","",str)

但它不起作用,因为它试图匹配以 s 结尾的字符串而不是单词。我正在尝试获得如下所示的输出:

[1] bill slashed for poor familie today
[2] your call are charged
[3] complaint dept awaiting refund

关于我如何做到这一点的任何指示?谢谢

【问题讨论】:

    标签: r regex string gsub


    【解决方案1】:

    $ 检查字符串的结尾,而不是单词的结尾。

    要检查单词边界,您应该使用\b

    所以:

    gsub("s\\b", "", str)
    

    【讨论】:

      【解决方案2】:

      这是一个非基础 R 解决方案:

      library(rebus)
      library(stringr)
      
      plurals <- "s" %R% BOUNDARY
      str_replace_all(str, pattern = plurals, replacement = "")
      

      【讨论】:

        【解决方案3】:

        您也可以使用积极的前瞻断言:

        gsub(pattern = "s{1}(?>\\s)", " ", x = str, perl = T)
        

        我不是正则表达式方面的专家,但我相信这个表达式会寻找一个“s”,如果它后跟一个空格。找到匹配项,它将“s”替换为空格。所以,最后的“s”被删除了。

        【讨论】:

        • 请注意,这不会捕获字符串末尾的 s,您应该在末尾添加 |s$ 以允许这样做(或者,使用 \b...)。
        猜你喜欢
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多