如何精确匹配以 0 结尾的表达式和另一个以 0 结尾后跟数字的 grep?
How to match precisely an expression finishing with 0 and another finishing with 0 followed by a number with grep?
我在R中模拟了125个场景,每个场景模拟了100次。
场景由分数标识,例如“075_05_0”、“025_025_025”、“0_05_1”,其中每个模拟的结果存储在数据框中。
我现在想将这些场景特定的数据帧放在一个嵌套列表中,其中列表的第一层与场景相关,下一层存储给定场景的 100 个数据帧。
我尝试使用以下代码:
reslist <- list()
for(i in seq_along(scenarios){
reslist[[i]] <- mget(ls(pattern = scenarios[i]))
}
其中“场景”是包含所有 125 个场景名称的字符向量。
此代码工作正常,除非我的字符串的结尾数字为 0(例如,075_025_0)。只要是这种情况,我的嵌套列表的第二层还包括所有场景的数据帧,其结尾编号以 0 开头,后跟数字(例如:075_025_025、075_025_05、 075_025_075).
然后我尝试通过显式使用“^”和“$”来分别匹配字符串的开头和结尾来替换我的代码,如下所示:
reslist <- list()
for(i in seq_along(scenarios){
reslist[[i]] <- mget(ls(pattern = grep("^",scenarios[i],"$",value=T)))
}
但是,这会导致同样的问题。
我需要确保来自 075_025_025(或者 075_025_05,075_025_075)等场景的模拟存储在与结尾为 0 的场景列表不同的列表中,而不是后跟任何其他数字(即 075_025_0)
是否有任何正则表达式可以精确匹配以 0 结尾的场景和另一个匹配以 0 结尾后跟数字 (_025, _05, _075) 的场景?
如果您能推荐更好的方法来解决我的问题,将不胜感激。
我们可以在 ls
之外使用 grep
。在这里,我们将问题解读为匹配以 0 开头的最后一组数字。使用的模式将匹配 _
后跟 0 和一个或多个数字 (\d+
) 在末尾 ( $
的字符串
reslist <- list()
for(i in seq_along(scenarios) {
reslist[[i]] <- mget(grep("_0\d+$",
ls(pattern = scenarios[i]), value = TRUE))
}
我在R中模拟了125个场景,每个场景模拟了100次。 场景由分数标识,例如“075_05_0”、“025_025_025”、“0_05_1”,其中每个模拟的结果存储在数据框中。
我现在想将这些场景特定的数据帧放在一个嵌套列表中,其中列表的第一层与场景相关,下一层存储给定场景的 100 个数据帧。
我尝试使用以下代码:
reslist <- list()
for(i in seq_along(scenarios){
reslist[[i]] <- mget(ls(pattern = scenarios[i]))
}
其中“场景”是包含所有 125 个场景名称的字符向量。
此代码工作正常,除非我的字符串的结尾数字为 0(例如,075_025_0)。只要是这种情况,我的嵌套列表的第二层还包括所有场景的数据帧,其结尾编号以 0 开头,后跟数字(例如:075_025_025、075_025_05、 075_025_075).
然后我尝试通过显式使用“^”和“$”来分别匹配字符串的开头和结尾来替换我的代码,如下所示:
reslist <- list()
for(i in seq_along(scenarios){
reslist[[i]] <- mget(ls(pattern = grep("^",scenarios[i],"$",value=T)))
}
但是,这会导致同样的问题。 我需要确保来自 075_025_025(或者 075_025_05,075_025_075)等场景的模拟存储在与结尾为 0 的场景列表不同的列表中,而不是后跟任何其他数字(即 075_025_0)
是否有任何正则表达式可以精确匹配以 0 结尾的场景和另一个匹配以 0 结尾后跟数字 (_025, _05, _075) 的场景?
如果您能推荐更好的方法来解决我的问题,将不胜感激。
我们可以在 ls
之外使用 grep
。在这里,我们将问题解读为匹配以 0 开头的最后一组数字。使用的模式将匹配 _
后跟 0 和一个或多个数字 (\d+
) 在末尾 ( $
的字符串
reslist <- list()
for(i in seq_along(scenarios) {
reslist[[i]] <- mget(grep("_0\d+$",
ls(pattern = scenarios[i]), value = TRUE))
}