我有一个ML算法的字符向量,它的末尾附加了1到2个数字,我试图匹配它(并最终摆脱它)。问题是我有一些精选的算法,它们的原始名称中包含数字,我也想保留这些数字。例如svmLinear2和C5.0。
示例字符向量:
algs <- c("svmLinear234", "svmLinear25", "C5.05", "C5.053", "gamSpline34", "bagEarth8")首先,我考虑合并一个负向回溯来避开算法的字符串,这些字符串将数字作为其原始名称的一部分:
algs %>%
str_view_all("(?<!svmLinear2|C5.0)[:digit:]{1,2}$")

对于最初名字中没有数字的算法,工作得很好,但似乎不适用于我试图消极查找的算法。
我尝试了一个积极的回顾,看看这将如何影响匹配(知道它在gamSpline34或bagEarth8上不起作用):
algs %>%
str_view_all("(?<=svmLinear2|C5.0)[:digit:]{1,2}$")

这对于那些原始名称中包含数字的算法非常有效,但我不知道如何将这个正则表达式与从算法中捕获原始名称中没有任何数字的数字结合起来。
我试图以某种方式组合这两个正则表达式,但我不确定如何组合。我曾尝试在|([:digit:]{1,2}$)中包含一个二级或正则表达式,但匹配变得过于贪婪。
因此,需要匹配的是:

发布于 2019-12-09 04:42:47
我假设您有所有可能算法的列表。将其放入我调用的TrueNames列表中,然后在algs中查找算法名称。
algs <- c("svmLinear234", "svmLinear25", "C5.05", "C5.053",
"gamSpline34", "bagEarth8")
TrueNames = c("svmLinear2", "C5.0", "gamSpline", "bagEarth")
Pat = paste(c(".*(", paste(TrueNames, collapse = "|"), ").*"), collapse="")
sub(Pat, "\\1", algs)
[1] "svmLinear2" "svmLinear2" "C5.0" "C5.0" "gamSpline"
[6] "bagEarth" https://stackoverflow.com/questions/59239574
复制相似问题