R:regexp \\ s不是空白空间

时间:2019-05-16 14:00:01

标签: r regex grep

我只是想知道为什么\\s在选项的括号[]中不起作用,但是空白有效吗?这是一个示例:

sub("[a-z ]+[a-z]+","it works","abcd xyz")
# [1] "it works

这就是我想要的。但是如果我使用\\s,我会得到:

sub("[a-z\\s]+[a-z]+","it works","abcd xyz")
# [1] "it works xyz"

[[:space:]]也没有给出我想要的结果:

sub("[a-z[[:space:]]]+[a-z]+","it works","abcd xyz") 
# [1] "abcd xyz"

为什么\\s在选项括号内不起作用?

这与编程语言R有关。

2 个答案:

答案 0 :(得分:2)

如果我们指定perl = TRUE,它应该可以工作。默认情况下为FALSE

sub("[a-z\\s]+[a-z]+","it works","abcd xyz", perl = TRUE)
#[1] "it works"

答案 1 :(得分:2)

就像我在评论中说的那样,您的最后一个正则表达式中有三个方括号,只有两个是必需的。
以下任何一项都可以满足您的要求。

sub("[a-z[:space:]]+[a-z]+","it works","abcd xyz")
sub("[[:lower:][:space:]]+[[:lower:]]+","it works","abcd xyz")
#[1] "it works"