如何在 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 否定任何字母数字字符的主要内容,如果未能解决你的问题,请参考以下文章

在python中用分隔符拆分一个字符串

在 Python 中用正则表达式替换

如何在R语言中用循环语句求一列中每24个数的均值

Python之让 字符串内的转义字符 不做任何处理

UDS中的否定响应和肯定响应,已经CAN通讯中的特点

如何在 PHP 中用单个空格正确替换多个空格?