如何在 r (str_) 中用 alnum 否定任何字母数字字符
Posted
技术标签:
【中文标题】如何在 r (str_) 中用 alnum 否定任何字母数字字符【英文标题】:how to negate any alphanumeric character with alnum in r (str_) 【发布时间】:2022-01-05 16:53:48 【问题描述】:我想用[:alnum:]
重写r中的以下正则表达式,在我的理解中应该做同样的事情:
starwars %>% mutate(name = str_replace_all(name, "[^a-zA-Z\\d\\s:\u00C0-\u00FF]", ""))
但我得到的行为完全不是我所期望的:
starwars %>% mutate(name = str_replace_all(name, "[^:alnum:]", ""))
顺便说一句,我需要删除下划线_
和所有空格。
【问题讨论】:
看起来你需要的模式是[\W_]+
,str_replace_all(name, "[\\W_]+", "")
感谢您的快速回答!
随时欢迎您。请注意,我更倾向于使用速记字符类,因为它们更便携。
【参考方案1】:
你可以使用
library(stringr)
str_replace_all(name, "[^[:alnum:]]+", "")
## or
str_replace_all(name, "[:^alnum:]+", "")
[^[:alnum:]]
模式是一个否定的括号表达式 ([^...]
),它匹配除字母和数字以外的任何字符([:alnum:]
,一个 POSIX 字符类)。
[:^alnum:]
模式是 POSIX 字符类的扩展,具有相反的含义。
+
是一个量词,它匹配它所量化的模式的一次或多次出现。
另外,在stringr
中,速记字符类可识别Unicode,因此您也可以使用
str_replace_all(name, "[\\W_]+", "")
\W
匹配除 Unicode 字母、数字或下划线以外的任何字符,_
匹配下划线。
【讨论】:
这里为什么需要 +? @DarioLacan 匹配一个或多个匹配项。以上是关于如何在 r (str_) 中用 alnum 否定任何字母数字字符的主要内容,如果未能解决你的问题,请参考以下文章