gpt4 book ai didi

r - 如何在 R 中提取这些多个正则表达式组

转载 作者:行者123 更新时间:2023-12-04 22:55:06 25 4
gpt4 key购买 nike

我有以下格式的字符串输入:

my.strings <- c("FACT11", "FACT11:FACT20", "FACT1sometext:FACT20", "FACT1text with spaces:FACT20", "FACT14:FACT20", "FACT1textAnd1312:FACT2etc", "FACT12:FACT22:FACT31")

我想提取所有“FACT”和 FACT 后面的第一个数字。所以这个例子的结果是:
c("FACT1", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2 FACT3")

或者,结果可能是一个列表,其中列表的每个元素都是一个包含 1 到 3 个项目的向量。

到目前为止我得到的是:
gsub("(FACT[1-3]).*?:(FACT[1-3]).*", '\\1 \\2', my.strings)
# [1] "FACT11" "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 "
# [7] "FACT1 FACT2 " "FACT1 FACT2 "

它看起来不错,除了第一个元素的“FACT11”而不是“FACT1”(删除第二个“1”),并且缺少 my.strings 的最后一个元素的“FACT3” .但是添加另一个组到 gsub不知何故把整个事情搞砸了。
gsub("(FACT[1-3]).*?:(FACT[1-3]).*?:(FACT[1-3]).*?", '\\1 \\2 \\3', my.strings)
# [1] "FACT11" "FACT11:FACT20" "FACT1sometext:FACT20"
# [4] "FACT1text with spaces:FACT20" "FACT14:FACT20" "FACT1textAnd1312:FACT2etc"
# [7] "FACT12:FACT21" "FACT1 FACT2 FACT31"

那么如何正确提取组呢?

最佳答案

您也可以使用基本的 R 方法:

> m <- regmatches(my.strings, gregexpr("FACT[1-3]", my.strings))
> sapply(m, paste, collapse=" ")
[1] "FACT1"
[2] "FACT1 FACT2"
[3] "FACT1 FACT2"
[4] "FACT1 FACT2"
[5] "FACT1 FACT2"
[6] "FACT1 FACT2"
[7] "FACT1 FACT2 FACT3"

提取所有与您的匹配项 FACT[1-3] (或 FACT[0-9]FACT\\d )模式,然后用空格“连接”它们。

关于r - 如何在 R 中提取这些多个正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com