在处理正则表达式时,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"
作为基本示例,请考虑以下 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"