在处理正则表达式时,R 中是否有命名组捕获机制?

Is there any named group capture mechanism in R while dealing with regular expressions?

作为基本示例,请考虑以下 data.frame:

df <- data.frame(
    colval = c(
        "line-01_tel=0000000001",
        "line-01_tel=0000000002",
        "line-01_tel=0000000003"
    )
)

假设“0000000001”、“0000000002”、“0000000003”是我们要使用命名组捕获提取的电话号码。使用 Python 这里是我的 poceed:

import re


def main():
    test_lst = [
        "line-01_tel=0000000001",
        "line-01_tel=0000000002",
        "line-01_tel=0000000003"
    ]
    regexp = r"=(?P<telnum>\d+)$"
    prog = re.compile(regexp, re.IGNORECASE)
    for item in test_lst:
        result = prog.search(item)
        if result:
            print("telnum = {}".format(result.group("telnum")))


if __name__ == "__main__":
    main()

是否可以在 R 中的上述代码中指示等同于 r"=(?P<telnum>\d+)$"result.group("telnum") 的内容?也就是说,R在处理正则表达式的时候有命名组捕获机制吗?

我查看了在线书籍“R for data science”的Strings chapter。有 str_match, str_sub 等函数用于处理正则表达式。但是我没有看到任何命名组捕获的例子。

namedCapture 包具有该功能。

library(namedCapture)
str_match_named(df$colval, "(?P<telnum>\d+)$")
##      telnum      
## [1,] "0000000001"
## [2,] "0000000002"
## [3,] "0000000003"

即使没有那个包,它也可以在 base R

m <- regexec("(?P<telnum>\d+)$", df$colval, perl = TRUE)
regmatches(df$colval, m)
## [[1]]
##                    telnum 
## "0000000001" "0000000001" 
##
## [[2]]
##                    telnum 
## "0000000002" "0000000002" 
##
## [[3]]
##                    telnum 
## "0000000003" "0000000003"