我已经定义
vec <- "5f 110y, Fast"
和
gsub("[\\s0-9a-z]+,", "", vec)
给出“ 5f Fast
”
我希望它能给出“ Fast
”,因为逗号前的所有内容都应由正则表达式进行匹配。
有人可以向我解释为什么不是这种情况吗?
答案 0 :(得分:18)
请记住,在TRE正则表达式模式中,不能使用\s
,\d
,\w
之类的正则转义符。
因此,您所用的正则表达式"[\\s0-9a-z]+,"
匹配1个或多个\
,s
,数字和小写ASCII字母,然后匹配单个,
。 / p>
您可以改用POSIX字符类,例如[:space:]
(任何空白)或[:blank:]
(水平空白):
> gsub("[[:space:]0-9a-z]+,", "", vec)
[1] " Fast"
或者,将PCRE正则表达式与\s
和perl=TRUE
参数一起使用:
> gsub("[\\s0-9a-z]+,", "", vec, perl=TRUE)
[1] " Fast"
要使\s
与所有Unicode空格匹配,请在模式开头(*UCP)
上添加gsub("(*UCP)[\\s0-9a-z]+,", "", vec, perl=TRUE)
PCRE动词。
答案 1 :(得分:2)
请您尝试跟进,让我知道是否对您有帮助。
vec <- c("5f 110y, Fast")
gsub(".*,","",vec)
OR
gsub("[[:alnum:]]+ [[:alnum:]]+,","",vec)
答案 2 :(得分:1)
一种tidyverse
解决方案是将str_replace
与原始正则表达式一起使用:
library(stringr)
str_replace(vec, "[\\s0-9a-z]+,", "")
答案 3 :(得分:0)
尝试其他正则表达式:
gsub("[[:blank:][:digit:][:lower:]]+,", "", vec)
#[1] " Fast"
或者,要删除逗号后的空格,
gsub("[[:blank:][:digit:][:lower:]]+, ", "", vec)
#[1] "Fast"