我有一个名为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字符类的字符之外的任何字符。