如何在 r (str_) 中用 alnum 否定任何字母数字字符

how to negate any alphanumeric character with alnum in r (str_)

我想使用 [:alnum:] 在 r 中重写以下正则表达式,在我看来应该做同样的事情:

starwars %>% mutate(name = str_replace_all(name, "[^a-zA-Z\d\s:\u00C0-\u00FF]", ""))

但是我得到的行为完全不是我所期望的:

starwars %>% mutate(name = str_replace_all(name, "[^:alnum:]", ""))

顺便说一下,我需要删除下划线 _ 和所有空格。

您可以使用

library(stringr)
str_replace_all(name, "[^[:alnum:]]+", "")
## or
str_replace_all(name, "[:^alnum:]+", "")

[^[:alnum:]] 模式是一个取反的 括号表达式 ([^...]),它匹配除字母和数字以外的任何字符 ([:alnum:],一个 POSIX 字符 class).

[:^alnum:] 模式是 POSIX 字符 class 的扩展,具有相反的含义。

+ 是一个量词,它匹配它所量化的模式的一次或多次出现。

此外,在 stringr 中,shorthand 字符 class 支持 Unicode,因此您也可以使用

str_replace_all(name, "[\W_]+", "")

其中 \W 匹配 Unicode 字母、数字或下划线以外的任何字符,_ 匹配下划线。