gsub中的正则表达式问题

时间:2018-07-19 11:29:15

标签: r regex gsub

我已经定义

vec <- "5f 110y, Fast"

gsub("[\\s0-9a-z]+,", "", vec)

给出“ 5f Fast

我希望它能给出“ Fast”,因为逗号前的所有内容都应由正则表达式进行匹配。

有人可以向我解释为什么不是这种情况吗?

4 个答案:

答案 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正则表达式与\sperl=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"