删除包含特殊字符的字段

时间:2017-02-22 14:23:35

标签: r regex grepl

我试图删除文本中包含特殊字符(array = [[int(j) for j in i.split(",")] for i in tmp] 等)的所有字段。

我想我应该使用

@?.*

其中Filter(function(x) {grepl('|[^[:punct:]]).*?', x)} == FALSE, data$V1) 包含我的数据。但是,好像是

data$V1

失败了一些简单的例子,如

grepl('|[^[:punct:]]).*?', x)

即使grepl('|[^[:punct:]]).*?', 'M') 没有特殊字符,也输出TRUE。我应该如何使用M从一列数据中删除带有特殊字符的字段?

3 个答案:

答案 0 :(得分:2)

要搜索“特殊字符”,您可以搜索否定字母数字字符:

grepl('[^[:alnum:]_]+', c('m','m@','M9*')) 
# [1] FALSE  TRUE  TRUE

或使用符号\W

grepl('\\W+', c('m','m@','M9*')) 
# [1] FALSE  TRUE  TRUE
regular expression help

中解释了

\W

  

“符号\ w匹配'word'字符([[:alnum:]_]的同义词,扩展名)和\ W是否定([^[:alnum:]_]̀)。”

答案 1 :(得分:1)

使用|开始使用正则表达式会使其毫无用处,因为它会匹配任何

请参阅此JS示例:

console.log('With the starting pipe    => ' + /|([\W]).*?/.test('M'));
console.log('Without the starting pipe => ' + /([\W]).*?/.test('M'));

答案 2 :(得分:1)

简单地将这些内容放在[...]中并将其提供给grepl的模式参数,然后否定。

data$V1[!grepl("[@?.*]", data$V1)]

例如,

> x <- c("M", "3@3", "8.*x")
> x[!grepl("[@?.*]", x)]
[1] "M"