给定包含捕获组(括号)和字符串的正则表达式,如何获得与捕获组匹配的所有子字符串,即通常由"\ 1","\ 2"引用的子字符串?
示例:考虑前缀为"xy"的正则表达式捕获数字:
s <- "xy1234wz98xy567"
r <- "xy(\\d+)"
Run Code Online (Sandbox Code Playgroud)
期望的结果:
[1] "1234" "567"
Run Code Online (Sandbox Code Playgroud)
第一次尝试gregexpr:
regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567"
Run Code Online (Sandbox Code Playgroud)
不是我想要的,因为它返回匹配整个模式的子串.
第二次尝试regexec:
regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234"
Run Code Online (Sandbox Code Playgroud)
不是我想要的,因为它返回只为整个模式和捕获组匹配第一次出现的.
如果有一个gregexec函数,扩展regexec为gregexpr扩展regexpr,我的问题将得到解决.
所以问题是:如何检索regmatches在任意正则表达式中匹配捕获组的所有子串(或可以传递给上面示例的索引)?
注意:r上面给出的模式只是一个愚蠢的例子,它必须保持随意.