使用stringr删除最后一个空格后的所有内容

使用stringr删除最后一个空格后的所有内容,r,regex,stringr,tidyverse,R,Regex,Stringr,Tidyverse,我有如下数据: df <- tribble( ~name, ~value, "Jake Lake MLP", 10, "Bay May CE", 5, "Drake Cake Jr. DSF", 9.1, "Sam Ram IR QQQZ", 1 ) 基本上在最后一个空格后删除所有内容 我试过: df %>% mutate(name = str_replace(name, "\\s.*$", "")) 但这不是我想要的 我们可以使用sub

我有如下数据:

df <- tribble(
    ~name, ~value,
    "Jake Lake MLP", 10, 
    "Bay May CE", 5,
    "Drake Cake Jr. DSF", 9.1,
    "Sam Ram IR QQQZ", 1
)
基本上在最后一个空格后删除所有内容

我试过:

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

但这不是我想要的

我们可以使用
sub

df %>% 
    mutate(name = sub("\\s+[^ ]+$", "", name))
或者在
str\u 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
df%>%
突变(name=str_replace(name,\\s[^]+$,“”)
#一个tibble:4×2
#名称值
#            
#1杰克湖10.0
#5月5日星期二
#3小德雷克蛋糕9.1
#4 Sam Ram IR 1.0


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

你能解释一下正则表达式中的
+[^]+
是怎么回事吗?我理解\\s和$。。。。只是不是中间部分。@emehx每当我们在方括号内使用
^
并且还有另一个字符(这里是空格)时,它意味着匹配除空格(这里)之外的任何字符。我不喜欢回收的
^
。。。我只知道它是
$
@emehex的对立面。如果您将它作为独立对象使用,它意味着字符串的开始。所以它的意思不同,你实际上可以把正则表达式从不被接受的答案中取出来
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