【问题标题】:How to properly remove last space and last character with str_replace_all?如何使用 str_replace_all 正确删除最后一个空格和最后一个字符?
【发布时间】:2021-06-03 14:01:51
【问题描述】:

我正在尝试删除一列字符串的最后一个空格和最后一个字符。

用齐次原子向量表示,字符串如下所示:

dirty_string <- c('finance analyst i')

当我尝试这个时:

str_replace_all(dirty_string,  c('[[:space:]+$i]'=''))

它会删除所有空格和所有i 字符

输出:

"fnanceanalyst"

预期输出:

"finance analyst"

如何在str_replace_all() 中的最后一个字符之前声明一个空格?

【问题讨论】:

  • 我假设你想删除任何尾随词,如果没有,你可以简单地使用str_replace(dirty_string, "\\s+i$", "")

标签: r regex string


【解决方案1】:

$ 指定最后一个非空格,即字符串的结尾。请注意,str_remove 将是一个更好的包装器,因为我们将替换为空白

library(stringr)
str_remove(dirty_string, "\\s+\\S+$")
#[1] "finance analyst"

详情:

  1. \\s+ - 一个或多个空格
  2. \\S+- 一个或多个非空格
  3. $ - 字符串结束

【讨论】:

    【解决方案2】:

    你可以使用

    library(stringr)
    dirty_string <- c('finance analyst i')
    str_replace(dirty_string, "\\s+\\w+$", "")
    ## => [1] "finance analyst"
    

    请参阅online R demo

    详情

    • \s+ - 一个或多个空白字符
    • \w+ - 一个或多个字母、数字或下划线
    • $ - 字符串结束。

    请注意,您不需要str_replace_all,因为涉及单个替换操作,所以str_replace 可以。

    请参阅regex demo

    【讨论】:

    • 仅供参考:如果有可能出现尾随空格,您可以在$str_replace(dirty_string, "\\s+\\w+\\s*$", "") 之前添加\s*
    【解决方案3】:

    基地R

    gsub("[[:space:]]+[[:alpha:]]+$", "", dirty_string)
    # [1] "finance analyst"
    

    stringr

    str_replace(dirty_string, "[[:space:]]+[[:alpha:]]+$", "")
    str_replace(dirty_string, "[[:space:]]+i$", "")
    # [1] "finance analyst"
    

    【讨论】:

      【解决方案4】:

      如果它总是,如你所说,在字符串结束前有一个空格和一个字符,那么就可以了:

      sub("(.*)(..)$", "\\1", dirty_string)
      [1] "finance analyst"
      

      这里你将字符串分成两个捕获组(...),第一个捕获最后两个字符之前的所有内容,第二个捕获最后两个字符;在替换子句中,您只使用\\1 调用第一个捕获组,从而有效地删除了第二个捕获组中的内容。

      编辑

      正如@Wiktor Stribiżew 在评论中指出的那样,不需要第二个捕获组:

      sub("(.*)..$", "\\1", dirty_string)
      

      【讨论】:

      • 您甚至不需要第二组,因为我们只捕获我们想要保留的内容。 sub("(.*)..$", "\\1", dirty_string) 可以。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2020-03-12
      • 1970-01-01
      • 2020-10-03
      • 2023-04-05
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多