我想将一个字符串拆分为单个字符,但用<
和>
包围的字符除外。因此,<a>bc<d>e
将变为<a>
b
c
<d>
e
。我尝试了(?<!<)(?!>)
,它似乎可以在正则表达式测试器中工作,但在R的以下代码中却无法工作。我做错了什么?
X = '<a>bc<d>e'
Y = '(?<!<)(?!>)'
unlist(strsplit(X,Y,perl=TRUE))
[1] "<" "a" ">" "b" "c" "<" "d" ">" "e"
答案 0 :(得分:2)
使用正面环顾四周,而不是负面的环境:
strsplit('<a>bc<d>e', '(?<=[^<])(?=[^>])', perl=TRUE)
## [[1]]
## [1] "<a>" "b" "c" "<d>" "e"
请参见R demo。
详细信息
(?<=[^<])
-向后的正向查找,要求紧靠当前位置左侧的<
以外的其他字符(?=[^>])
-一个正向超前查询,需要在当前位置的右侧紧邻>
以外的其他字符。答案 1 :(得分:1)
(<[^>]+>|\S)
似乎可以正常工作。这会尝试首先将所有包围的三角括号匹配,如果没有,则匹配单个字符。
regmatches(X, gregexpr("<[^>]+>|\\S",X))[[1]]
#> [1] "<a>" "b" "c" "<d>" "e"