在R中的列中查找非字母数字字符

  • 本文关键字:数字字符 查找 regex
  • 更新时间 :
  • 英文 :


我有一个名为frame的数据帧,ID和名称为

1 marisa monte
2 dru hill
3 2pac
4 rã¶yksopp
5 cafã© del mar
6 maria bethã¢nia

这是预期的输出

> no_alpha
[1] 4 5 6

我想用任何非字母数字字符来分隔名称,期望从具有这些字符的行中获取索引。换句话说,如果[a-zA-Z0-9]之外至少有一个字符,则应包括该行。由于某种原因,我很难做到这一点。

下面是我尝试过的一些变体及其输出。不管怎样,看完这篇文章,我还是看不出我的错误。显然,我遗漏了一些重要的元素,因为返回的向量都不满足条件"0";除了字母数字以外的任何东西";。

no_alpha <- grep("[^a-zA-Z0-9]", frame$name)
> no_alpha
integer(0) 
no_alpha <- grep("[a-zA-Z0-9]", frame$name, invert = TRUE)
> no_alpha
integer(0)
no_alpha <- grep("[^[:alnum:]_]", frame$name)
> no_alpha
[1] 1 2 3 4 5 6

有什么想法吗?

您似乎需要

x <- c('marisa monte', 'dru hill', '2pac', 'rã¶yksopp', 'cafã© del mar', 'maria bethã¢nia')
grep("[^a-zA-Z0-9[:space:]]", x)
## => [1] 4 5 6

在线观看R演示。

TRE兼容正则表达式与匹配

  • [^-否定括号表达式的开始:
    • a-z-小写ASCII字母
    • A-Z-大写ASCII字母
    • 0-9-ASCII数字
    • [:space:]-一个与任何空格匹配的POSIX字符类
  • ]-括号表达式的末尾

因此,它匹配除了属于上面列出的ranges/POSIX字符类的字符之外的任何字符。

最新更新