【发布时间】:2015-08-05 21:53:29
【问题描述】:
This regex:(.*?)(?:I[0-9]-)*I3(?:-I[0-9])* 匹配使用多个组的表达式。正则表达式的重点在于它以两个成对的形式捕获模式,其中正则表达式的第一部分必须跟在正则表达式的第二部分之后。
如何提取这两个组?
library(stringr)
data <- c("A-B-C-I1-I2-D-E-F-I1-I3-D-D-D-D-I1-I1-I2-I1-I1-I3-I3-I7")
str_extract_all(data, "(.*?)(?:I[0-9]-)*I3(?:-I[0-9])*")
给我:
[[1]]
[1] "A-B-C-I1-I2-D-E-F-I1-I3" "-D-D-D-D-I1-I1-I2-I1-I1-I3-I3-I7"
但是,我想要一些类似的东西:
[[1]]
[1] "A-B-C-I1-I2-D-E-F" [2] "I1-I3"
[[2]]
[1] "D-D-D-D" [2] "I1-I1-I2-I1-I1-I3-I3-I7"
这里的关键是正则表达式匹配两次,每次包含 2 个组。我希望每场比赛都有一个自己的列表,并且该列表包含 2 个元素,每个组一个。
【问题讨论】:
-
哇......完全误读了这个问题......
-
(?: ... )是非捕获组... -
你没有两个捕获组..
-
@hwnd:所以帮帮我吧——我该如何修改它来获得两个组?