目标是删除字符串中的所有非大写字母,而我设法找到了一个不完全理解的正则表达式解决方案。
> gsub("[^::A-Z::]","", "PendingApproved")
[1] "PA"
我试图在R中阅读正则表达式的documentation,但实际上并没有真正覆盖双冒号。
[]
在正则表达式中包含要匹配的字符,A-Z
意味着大写,而^
则不是,有人可以帮助我了解那里的双冒号吗?
答案 0 :(得分:4)
据我所知,您不需要那些双冒号:
gsub("[^A-Z]", "", "PendingApproved")
[1] "PA"
您当前的模式说要删除任何不是A-Z
或冒号:
的字符。在字符范围的每一侧重复两次冒号的事实不会增加任何额外的逻辑。
也许您正在使用的代码的作者将双冒号与R的正则表达式自身的语法混淆在一起,用于命名字符类。例如,我们可以将上面的代码写为:
gsub("[^[:upper:]]","", "PendingApproved")
其中[:upper:]
表示所有大写字母。
答案 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"