我正在尝试按“%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都是如此。
答案 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%|@'