我正在尝试编写一个正则表达式,将所有不包含 *
的值替换为 NA
。有人可以解释如何正确否定 R 风格(PCRE?)正则表达式中的转义字符吗?
temp<-data.frame(c("hi","keep**",NA),c("keep***",NA,"xxx"))
lapply(temp,function(x){gsub("[^\\*]",NA,x)}) #This did not work like I thought it would
目标
NA keep***
keep* NA
NA NA
最佳答案
看来主要问题是您仅将一个不是星号的字符与 [^\\*]
相匹配。 ,并将其替换为 NA
使用gsub
,而您需要替换整个值(=字符串)。
使用^[^*]*$
:
-
^
- 字符串开头 -
[^*]*
- 匹配 0+ 不是*
的字符(由于末尾有*
量词) ([^...]
是一个否定字符类,它匹配该类中定义的字符以外的所有字符) -
$
- 字符串结尾。
由于正则表达式用于 gsub
没有perl=T
,您不能在字符类中使用转义字符,TRE(源自 POSIX)正则表达式风格禁止使用转义字符。
关于regex - R 风格正则表达式中的匹配转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36722414/