我在这里尝试使用正则表达式 ((?:I\d-?)*I3(?:-?I\d)*
) 参考链接:
从字符串 A-B-C-I1-I2-D-E-F-I1-I3-D-D-D-D-I1-I1-I3-I1-I1-I3-I2-L-K-I3-P-F-I2-I2
中,我得到以下匹配结果:I1-I3
、I1-I1-I3-I1-I1-I3-I2
和 I3
,这是期望的行为。然而,在R中:
x <- "A-B-C-I1-I2-D-E-F-I1-I3-D-D-D-D-I1-I1-I3-I1-I1-I3-I2-L-K-I3-P-F-I2-I2"
strsplit(x, "(?:I\d-?)*I3(?:-?I\d)*")
这会返回一个错误:
Error: '\d' is an unrecognized escape in character string starting ""(?:I\d"
我尝试过使用
perl=TRUE
,但没有任何区别。我还尝试修改正则表达式为:
(?:I\\d-?)*I3(?:-?I\\d)*
,但它并没有给出正确的结果,相反它匹配了A-B-C-I1-I2-D-E-F-
,-D-D-D-D-
,-L-K-
和-P-F-I2-I2
。
如何在R中复制所需行为?
\\d
进行转义,例如strsplit(x, "(?:I\\d-?)*I3(?:-?I\\d)*")
。 - akrunstr_extract_all(x, '(?:I\\d-?)*I3(?:-?I\\d)*')
我只看了错误部分。抱歉。 - akrun