R正则表达式中的双冒号

时间:2018-07-28 15:30:55

标签: r regex

目标是删除字符串中的所有非大写字母,而我设法找到了一个不完全理解的正则表达式解决方案。

> gsub("[^::A-Z::]","", "PendingApproved")
[1] "PA"

我试图在R中阅读正则表达式的documentation,但实际上并没有真正覆盖双冒号。

[]在正则表达式中包含要匹配的字符,A-Z意味着大写,而^则不是,有人可以帮助我了解那里的双冒号吗?

3 个答案:

答案 0 :(得分:4)

据我所知,您不需要那些双冒号:

gsub("[^A-Z]", "", "PendingApproved")
[1] "PA"

您当前的模式说要删除任何不是A-Z 冒号:的字符。在字符范围的每一侧重复两次冒号的事实不会增加任何额外的逻辑。

也许您正在使用的代码的作者将双冒号与R的正则表达式自身的语法混淆在一起,用于命名字符类。例如,我们可以将上面的代码写为:

gsub("[^[:upper:]]","", "PendingApproved")

其中[:upper:]表示所有大写字母。

Demo

答案 1 :(得分:2)

要删除所有小写字母,请使用以下命令:

gsub("[a-z]","", "PendingApproved")

^仅表示起始字符,因此

gsub("^[a-z]","", "PendingApproved")

不会从测试的字符串中删除任何字母,因为您的字符串开头没有小写字母。

编辑: 根据Tim的评论,在字符类中也添加了否定的内容。因此,假设我们要删除字母和数字之间给定值中的所有数字,那么以下操作可能会有所帮助。

gsub("[^[:alpha:]]","", "PendingApproved1213133")

在告诉gsub的地方,请勿在此过程中替换字母。 ^在字符类中作为否定符。

答案 2 :(得分:1)

我们可以使用str_remove中的stringr

library(stringr)
str_remove_all("PendingApproved", "[a-z]+")
#[1] "PA"