正则表达式给出意想不到的结果[:space:]

时间:2017-09-06 09:30:04

标签: r regex gsub

我正在学习如何在R中使用正则表达式,但有点挣扎。 我从R documentationother sources了解.代表任何字符,*表示先前的状态模式可能会出现任意数量的时间。

所以,如果我尝试类似的东西:

gsub(".* ","test_","abcd efgh")

替换空格之前的字符串部分,并按预期得到“test_efgh”。

然后我尝试使用[:space:]而不是“”。来自R文档:

  

[:空间:]

     

空格字符:制表符,换行符,垂直制表符,换页符,回车符,空格以及可能的其他与语言环境相关的字符

但是我得到了完全不同的输出,如下所示:

gsub(".*[:space:]","test_","abcd efgh")
#"test_fgh" : "e" is missing
gsub(".*[:space:]","test_","bcd df")
#"test_d df" : the first "d" was not replaced
gsub(".*[:space:]","test_","bcd bcde")
#"test_" : everything was cleared after the space
gsub(".*[:space:]","test_","bb df")
#"bb_df" : nothing was replaced

如果我使用“”而不是[:space:],所有这些示例都可以正常工作,所以我想我对后者缺少了一些东西。我不明白为什么它不适用于这些情况,我不明白为什么输出如此不同(在案例1和3中,我希望保留的字母被清除,而在案例2和4中,字母I想被清除的不是)。

我应该如何使用[:space:],为什么我从看似相同的用途获得不同的输出?

0 个答案:

没有答案