我试图删除文本中包含特殊字符(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
从一列数据中删除带有特殊字符的字段?
答案 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"