Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 四分五裂_R_Regex_Regex Lookarounds_Strsplit - Fatal编程技术网

R 四分五裂

R 四分五裂,r,regex,regex-lookarounds,strsplit,R,Regex,Regex Lookarounds,Strsplit,我想将字符串拆分为单独的字符,除了那些被包围的字符。因此,bce将变成bce。我尝试了(?),它似乎在正则表达式测试仪中工作,但在R中的以下代码中不工作。我做错了什么 X = '<a>bc<d>e' Y = '(?<!<)(?!>)' unlist(strsplit(X,Y,perl=TRUE)) [1] "<" "a" ">" "b" "c" "<" "d" ">" "e" X='bce' Y='(?)' unlist(str

我想将字符串拆分为单独的字符,除了那些被
包围的字符。因此,
bce
将变成
b
c
e
。我尝试了
(?)
,它似乎在正则表达式测试仪中工作,但在R中的以下代码中不工作。我做错了什么

X = '<a>bc<d>e'
Y = '(?<!<)(?!>)'
unlist(strsplit(X,Y,perl=TRUE))
[1] "<" "a" ">" "b" "c" "<" "d" ">" "e"
X='bce'
Y='(?)'
unlist(strsplit(X,Y,perl=TRUE))
[1] “b”“c”“e”
(]+>|\S)
似乎有效。这将首先尝试将三角形括号与其所包含的所有内容匹配,如果不匹配,则匹配单个字符

regmatches(X,gregexpr(“]+>\\\S”,X))[[1]]
#>[1]“b”c“e”

使用积极的环视而不是消极的:

strsplit('<a>bc<d>e', '(?<=[^<])(?=[^>])', perl=TRUE)
## [[1]]
## [1] "<a>" "b"   "c"   "<d>" "e"  
strsplit(')

详细信息


  • (?这似乎与Rs正则表达式的风格有关。你可以尝试
    stringi::stri_split_regex(X,Y,省略_empty=TRUE)
    instedi为Y添加了两个积极的lookarounds,这似乎起到了作用。我猜strsplit不会拆分,除非你真的告诉它去寻找存在的东西。
    Y='(?)(?在中,有一些关于空字符串匹配的提示:“小心:需要区分空(rm_eo==0)和非空(rm_eo>0)匹配。在前一种情况下,提取的标记是下一个字符。否则,它是匹配开始之前的所有内容,可能是空字符串(而不是空字符串)。”令牌“”(严格意义上的)。“它可以工作,但不能与
    strsplit
    一起工作,它需要一个正则表达式作为分隔符,并且有一个特殊的情况来拆分每个字符,我允许自己编辑您的帖子,使您的建议生效。
    regmatches(X, gregexpr("<[^>]+>|\\S",X))[[1]]
    #> [1] "<a>" "b"   "c"   "<d>" "e"  
    
    strsplit('<a>bc<d>e', '(?<=[^<])(?=[^>])', perl=TRUE)
    ## [[1]]
    ## [1] "<a>" "b"   "c"   "<d>" "e"