【问题标题】:how to negate any alphanumeric character with alnum in r (str_)如何在 r (str_) 中用 alnum 否定任何字母数字字符
【发布时间】: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_]+", "")
  • 感谢您的快速回答!
  • 随时欢迎您。请注意,我更倾向于使用速记字符类,因为它们更便携。

标签: r regex stringr


【解决方案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 匹配一个或多个匹配项。
猜你喜欢
  • 2017-10-18
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2011-04-03
  • 2021-03-07
相关资源
最近更新 更多