删除具有特殊字符的字段
Remove fields with special characters
我正在尝试删除文本中包含特殊字符(@?.*
等)的所有字段。
我想我应该使用
Filter(function(x) {grepl('|[^[:punct:]]).*?', x)} == FALSE, data$V1)
其中 data$V1
包含我的数据。不过好像
grepl('|[^[:punct:]]).*?', x)
在像
这样的小例子中失败
grepl('|[^[:punct:]]).*?', 'M')
即使 M
没有特殊字符,它也会输出 TRUE
。我应该如何使用 grepl
从数据列中删除带有特殊字符的字段?
以 |
开头的正则表达式会使它毫无用处,因为它将匹配 任何东西.
参见这个 JS 示例:
console.log('With the starting pipe => ' + /|([\W]).*?/.test('M'));
console.log('Without the starting pipe => ' + /([\W]).*?/.test('M'));
要搜索"special characters",您可以搜索字母数字字符的否定:
grepl('[^[:alnum:]_]+', c('m','m@','M9*'))
# [1] FALSE TRUE TRUE
或使用符号\W
grepl('\W+', c('m','m@','M9*'))
# [1] FALSE TRUE TRUE
\W
在regular expression help中有解释:
"The symbol \w matches a ‘word’ character (a synonym for [[:alnum:]_]
, an extension) and \W is its negation ([^[:alnum:]_]̀
)."
只需将这些放在 [...]
中并将其提供给 grepl
的模式参数,然后取反。
data$V1[!grepl("[@?.*]", data$V1)]
例如,
> x <- c("M", "3@3", "8.*x")
> x[!grepl("[@?.*]", x)]
[1] "M"
我正在尝试删除文本中包含特殊字符(@?.*
等)的所有字段。
我想我应该使用
Filter(function(x) {grepl('|[^[:punct:]]).*?', x)} == FALSE, data$V1)
其中 data$V1
包含我的数据。不过好像
grepl('|[^[:punct:]]).*?', x)
在像
这样的小例子中失败grepl('|[^[:punct:]]).*?', 'M')
即使 M
没有特殊字符,它也会输出 TRUE
。我应该如何使用 grepl
从数据列中删除带有特殊字符的字段?
以 |
开头的正则表达式会使它毫无用处,因为它将匹配 任何东西.
参见这个 JS 示例:
console.log('With the starting pipe => ' + /|([\W]).*?/.test('M'));
console.log('Without the starting pipe => ' + /([\W]).*?/.test('M'));
要搜索"special characters",您可以搜索字母数字字符的否定:
grepl('[^[:alnum:]_]+', c('m','m@','M9*'))
# [1] FALSE TRUE TRUE
或使用符号\W
grepl('\W+', c('m','m@','M9*'))
# [1] FALSE TRUE TRUE
\W
在regular expression help中有解释:
"The symbol \w matches a ‘word’ character (a synonym for
[[:alnum:]_]
, an extension) and \W is its negation ([^[:alnum:]_]̀
)."
只需将这些放在 [...]
中并将其提供给 grepl
的模式参数,然后取反。
data$V1[!grepl("[@?.*]", data$V1)]
例如,
> x <- c("M", "3@3", "8.*x")
> x[!grepl("[@?.*]", x)]
[1] "M"