使用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