2

我正在尝试按组“%in%”和字符“@”拆分字符串。所有文档和我能找到的所有内容都表明括号是用于在 R 正则表达式中进行分组的元字符。所以代码

    > strsplit('example%in%aa(bbb)aa@cdef', '[(%in%)@]', perl=TRUE)

应该给我

    [[1]]
    [1] "example" "aa(bbb)aa"      "cdef"

也就是说,它应该单独保留 "aa(bbb)aa" 中的括号,因为匹配表达式中的括号没有被转义。但实际上它给了我

    [[1]]
    [1] "example" ""   ""    ""    "aa"    "bbb"   "aa"    "cdef"

好像括号不是元字符!这是怎么回事,我该如何解决?谢谢!

在 strsplit 中无论有无参数 perl=TRUE 都是如此。

4

3 回答 3

6

不确定您正在阅读什么文档,但扩展正则表达式部分?regex说:

大多数元字符在字符类中失去了它们的特殊含义。...(只有 '^ - \ ]' 在字符类中是特殊的。)

您不需要创建角色类。只需使用“或” |(您可能也不需要分组"%in%",但它不应该伤害任何东西):

> strsplit('example%in%aa(bbb)aa@cdef', '(%in%)|@', perl=TRUE)
[[1]]
[1] "example"   "aa(bbb)aa" "cdef"
于 2014-01-15T22:21:40.217 回答
3

不需要在这里使用[or (,就这个:

strsplit('example%in%aa(bbb)aa@cdef', '%in%|@')
[[1]]
[1] "example"   "aa(bbb)aa" "cdef"     
于 2014-01-15T22:22:23.920 回答
2

在字符类[]中,大多数字符失去了它们的特殊含义,包括().

您可能需要这个正则表达式:

'%in%|@'
于 2014-01-15T22:21:18.207 回答