我正在学习如何在R中使用正则表达式,但有点挣扎。
我从R documentation和other 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:]
,为什么我从看似相同的用途获得不同的输出?