第 2 次出现之间的 REGEX PCRE 字符
REGEX PCRE characters between 2 nth occurrences
我有类似于以下结构的数据。我需要提取第三次出现 "May 2016" 和 "Jun 2016".
之间的数据
我有以下模式(坦率地说)构造不正确(并且它没有带回我想要的字符)。
(.*(?>May 2016)){3}(.*(?=Jun 2016)){3}/s
我是 Regex 的新手,请问谁能帮我正确的表达。
May 2016 ef
Jun 2016 efef May 2016 Jun 2016 May 2016
dffdg def efef
Jun 2016
May 2016
Jun 2016
如果可以假设 "May 2016" 和 "Jun 2016" 交替出现并且前者在前,那么
x <- "May 2016 A Jun 2016 B May 2016 Jun 2016 May 2016 C Jun 2016 May 2016 Jun 2016"
sub("(.*?May 2016.*?Jun 2016){2}.*?May 2016(.*?)Jun 2016.*", "\2", x)
[1] " C "
给你(这个需要perl = TRUE
):
(?s)(?:.*?May 2016){3}\K.*?(?=Jun 2016)
解释:
(?s)
激活单行选项
(?:.*?May 2016){3}
匹配 May 2016
3 次,中间有随机文本
\K
从匹配值 中丢弃到目前为止匹配的内容
.*?
匹配任何东西
(?=Jun 2016)
...直到第一次出现 Jun 2016
几种方式
tt <- readLines(textConnection("May 2016 ef Jun 2016 efef May 2016 Jun 2016 May 2016
dffdg def efef
Jun 2016
May 2016
Jun 2016"))
(tt <- paste0(tt, collapse = ''))
# [1] "May 2016 ef Jun 2016 efef May 2016 Jun 2016 May 2016dffdg def efefJun 2016May 2016Jun 2016"
m <- gregexpr('May 2016(.*?)Jun 2016', tt, perl = TRUE)
mapply(function(x, y) substr(tt, x, x + y - 1),
attr(m[[1]], 'capture.start'), attr(m[[1]], 'capture.length'))[3]
# [1] "dffdg def efef"
gsub('May.*May.*May 2016(.*?)Jun 2016.*', '\1', tt)
# [1] "dffdg def efef"
我有类似于以下结构的数据。我需要提取第三次出现 "May 2016" 和 "Jun 2016".
之间的数据我有以下模式(坦率地说)构造不正确(并且它没有带回我想要的字符)。
(.*(?>May 2016)){3}(.*(?=Jun 2016)){3}/s
我是 Regex 的新手,请问谁能帮我正确的表达。
May 2016 ef Jun 2016 efef May 2016 Jun 2016 May 2016
dffdg def efef
Jun 2016
May 2016
Jun 2016
如果可以假设 "May 2016" 和 "Jun 2016" 交替出现并且前者在前,那么
x <- "May 2016 A Jun 2016 B May 2016 Jun 2016 May 2016 C Jun 2016 May 2016 Jun 2016"
sub("(.*?May 2016.*?Jun 2016){2}.*?May 2016(.*?)Jun 2016.*", "\2", x)
[1] " C "
给你(这个需要perl = TRUE
):
(?s)(?:.*?May 2016){3}\K.*?(?=Jun 2016)
解释:
(?s)
激活单行选项(?:.*?May 2016){3}
匹配May 2016
3 次,中间有随机文本\K
从匹配值 中丢弃到目前为止匹配的内容
.*?
匹配任何东西(?=Jun 2016)
...直到第一次出现Jun 2016
几种方式
tt <- readLines(textConnection("May 2016 ef Jun 2016 efef May 2016 Jun 2016 May 2016
dffdg def efef
Jun 2016
May 2016
Jun 2016"))
(tt <- paste0(tt, collapse = ''))
# [1] "May 2016 ef Jun 2016 efef May 2016 Jun 2016 May 2016dffdg def efefJun 2016May 2016Jun 2016"
m <- gregexpr('May 2016(.*?)Jun 2016', tt, perl = TRUE)
mapply(function(x, y) substr(tt, x, x + y - 1),
attr(m[[1]], 'capture.start'), attr(m[[1]], 'capture.length'))[3]
# [1] "dffdg def efef"
gsub('May.*May.*May 2016(.*?)Jun 2016.*', '\1', tt)
# [1] "dffdg def efef"