我已经定义
vec <- "5f 110y, Fast"
和
gsub("[\\s0-9a-z]+,", "", vec)
给出“
5f Fast
”我本来希望它给出“
Fast
”,因为逗号前的所有内容都应由正则表达式匹配。谁能向我解释为什么不是这种情况?
最佳答案
您应该记住,在TRE正则表达式模式中,不能使用\s
,\d
,\w
之类的正则转义。
因此,您所用的正则表达式"[\\s0-9a-z]+,"
匹配1个或多个\
,s
,数字和小写ASCII字母,然后匹配一个,
。
您可以改用POSIX字符类,例如[:space:]
(任何空白)或[:blank:]
(水平空白):
> gsub("[[:space:]0-9a-z]+,", "", vec)
[1] " Fast"
或者,使用带有
\s
和perl=TRUE
参数的PCRE正则表达式:> gsub("[\\s0-9a-z]+,", "", vec, perl=TRUE)
[1] " Fast"
要使
\s
与所有Unicode空格匹配,请在模式开头:(*UCP)
上添加gsub("(*UCP)[\\s0-9a-z]+,", "", vec, perl=TRUE)
PCRE动词。关于r - gsub中的正则表达式问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51421537/