r - gsub中的正则表达式问题

标签 r regex gsub

我已经定义

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"


或者,使用带有\sperl=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/

相关文章:

r - 在数据框打印期间缩写列名

javascript - 替换 JavaScript 中的正则表达式匹配

Ruby 正则表达式组替换

R,gsub(),在给定某些条件下将 "."替换为 ","

regex - lua gsub 特殊替换产生无效的捕获索引

r - R中的lm()回归的summary()中“残留标准误差”的含义是什么?

matlab - R中的秒表功能

regex - 需要在vb.net中解析一个字符串

r - 环境问题

javascript - 使用一个 JavaScript 正则表达式捕获四个数字