R正则表达式:括号不作为元字符

时间:2014-01-15 22:16:09

标签: regex r metacharacters

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

    > 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都是如此。

3 个答案:

答案 0 :(得分:6)

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

  

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

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

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

答案 1 :(得分:3)

此处无需使用[(,只需:

strsplit('example%in%aa(bbb)aa@cdef', '%in%|@')
[[1]]
[1] "example"   "aa(bbb)aa" "cdef"     

答案 2 :(得分:2)

在角色类[]内,大多数角色都失去了特殊含义,包括()

您可能需要此正则表达式:

'%in%|@'