R正则表达式中的双冒号
目标是删除字符串中所有非大写字母,我在没有完全理解的情况下设法找到了正则表达式解决方案R正则表达式中的双冒号,r,regex,R,Regex,目标是删除字符串中所有非大写字母,我在没有完全理解的情况下设法找到了正则表达式解决方案 > gsub("[^::A-Z::]","", "PendingApproved") [1] "PA" 我试着阅读R中的正则表达式,但是这里并没有真正涉及到双冒号 []包括要在正则表达式中匹配的字符,A-Z表示大写,^表示不,有人能帮我理解那里的双冒号是什么吗 据我所知,您不需要那些双冒号: gsub("[^A-Z]", "", "PendingApproved") [1] "PA" 您当前的模式要
> gsub("[^::A-Z::]","", "PendingApproved")
[1] "PA"
我试着阅读R中的正则表达式,但是这里并没有真正涉及到双冒号
[]
包括要在正则表达式中匹配的字符,A-Z
表示大写,^
表示不,有人能帮我理解那里的双冒号是什么吗 据我所知,您不需要那些双冒号:
gsub("[^A-Z]", "", "PendingApproved")
[1] "PA"
您当前的模式要求删除任何不是A-Z
或冒号:
的字符。在字符范围的每一侧重复冒号两次并不会增加任何额外的逻辑
也许您正在使用的代码的作者混淆了双冒号与R的正则表达式自己的命名字符类语法。例如,我们可以将上述内容写成:
gsub("[^[:upper:]]","", "PendingApproved")
其中,[:大写:
表示所有大写字母
要删除所有小写字母,请使用以下命令:
gsub("[a-z]","", "PendingApproved")
^
仅表示起始字符,因此
gsub("^[a-z]","", "PendingApproved")
不会从测试字符串中删除任何字母,因为字符串开头没有任何小写字母
编辑:根据Tim的评论,在这里添加negation在角色类中的工作。假设我们要删除字母表和数字中给定值的所有数字,那么下面可能会有所帮助
gsub("[^[:alpha:]]","", "PendingApproved1213133")
在这个过程中,如果它告诉你的是
gsub
,那么不要替换字母^
在字符类中用作否定。我们可以使用str\u remove
从stringr
library(stringr)
str_remove_all("PendingApproved", "[a-z]+")
#[1] "PA"
这没有抓住问题的关键。
^
字符在字符类中使用时,会否定该类,与位置无关。@TimBiegeleisen,当然是Tim,现在也在这里添加了这一点。谢谢你让我知道。对于命名字符类,没有什么比R的正则表达式更像的了。像[:digit://code>这样的结构称为POSIX字符类,在许多正则表达式风格中使用。此外,R在其库中有几个正则表达式引擎,如TRE、ICU、PCRE、TCL。@WiktorStribiżew是的,我知道这一点,而且我也知道不同的R库使用不同的风格。然而,当您阅读sub
上的文档时,您将看到这些字符类的显示,就好像它是API的一部分一样。