【问题标题】:Remove everything after last space with stringr [duplicate]用 stringr 删除最后一个空格后的所有内容 [重复]
【发布时间】:2017-03-01 18:14:46
【问题描述】:

我的数据如下所示:

df <- tribble(
    ~name, ~value,
    "Jake Lake MLP", 10, 
    "Bay May CE", 5,
    "Drake Cake Jr. DSF", 9.1,
    "Sam Ram IR QQQZ", 1
)

我想修剪所有名称,以便它们:

"Jake Lake",
"Bay May", 
"Drake Cake Jr.",
"Sam Ram IR"

基本上删除最后一个空格之后的所有内容。

我试过了:

df %>% mutate(name = str_replace(name, "\\s.*$", ""))

但这不是我想要的!

【问题讨论】:

标签: r regex stringr tidyverse


【解决方案1】:

我们可以使用sub

df %>% 
    mutate(name = sub("\\s+[^ ]+$", "", name))

或者str_replace中的相同模式

df %>% 
   mutate(name = str_replace(name, "\\s[^ ]+$", ""))
# A tibble: 4 × 2
#            name value
#           <chr> <dbl>
#1      Jake Lake  10.0
#2        Bay May   5.0
#3 Drake Cake Jr.   9.1
#4     Sam Ram IR   1.0

该模式表示一个空格(\\s)后跟一个或多个非空格(否则它可以\\S+)直到字符串的末尾,并将其替换为空白""。在 OP 的代码中,它是非特定的 (.*)。

【讨论】:

  • 您能解释一下正则表达式中+[^ ]+ 的情况吗?我理解 \\s 和 $.... 只是不是中间部分。
  • @emehex 每当我们在方括号内使用^ 并且还有另一个字符(这里是空格)时,表示匹配除空格之外的任何字符(这里)
  • 明白了。我不喜欢回收的^ ...我只知道它与$相反。
  • @emehex 如果单独使用,则表示字符串的开头。所以它的含义不同
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2020-07-06
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2018-05-17
  • 2017-04-12
  • 2019-04-23
相关资源
最近更新 更多