gsub中的正则表达式问题

Tha*_*dle 19 regex r gsub

我已经定义了

vec <- "5f 110y, Fast"
Run Code Online (Sandbox Code Playgroud)

gsub("[\\s0-9a-z]+,", "", vec)
Run Code Online (Sandbox Code Playgroud)

给" 5f Fast"

我原以为它会给出" Fast",因为逗号之前的所有内容都应该与正则表达式相匹配.

任何人都可以向我解释为什么不是这种情况?

Wik*_*żew 18

你应该记住的是,在TRE正则表达式模式,您不能使用正则表达式逃逸像\s,\d,\w.

所以,你的情况正则表达式,"[\\s0-9a-z]+,"火柴1以上\,s,数字和小写ASCII字母,然后单,.

您可以使用POSIX字符类,例如[:space:](任何空格)或[:blank:](水平空格):

> gsub("[[:space:]0-9a-z]+,", "", vec)
[1] " Fast"
Run Code Online (Sandbox Code Playgroud)

或者,使用PCRE正则表达式\sperl=TRUE参数:

> gsub("[\\s0-9a-z]+,", "", vec, perl=TRUE)
[1] " Fast"
Run Code Online (Sandbox Code Playgroud)

\s匹配所有Unicode空格,请(*UCP)在模式开始处添加PCRE动词:gsub("(*UCP)[\\s0-9a-z]+,", "", vec, perl=TRUE).