Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R正则表达式中的双冒号_R_Regex - Fatal编程技术网

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的一部分一样。