首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串末尾匹配1-2个数字,同时查找带有数字的预定义字符串

在字符串末尾匹配1-2个数字,同时查找带有数字的预定义字符串
EN

Stack Overflow用户
提问于 2019-12-09 04:22:01
回答 1查看 69关注 0票数 2

我有一个ML算法的字符向量,它的末尾附加了1到2个数字,我试图匹配它(并最终摆脱它)。问题是我有一些精选的算法,它们的原始名称中包含数字,我也想保留这些数字。例如svmLinear2C5.0

示例字符向量:

代码语言:javascript
复制
algs <- c("svmLinear234", "svmLinear25", "C5.05", "C5.053", "gamSpline34", "bagEarth8")

首先,我考虑合并一个负向回溯来避开算法的字符串,这些字符串将数字作为其原始名称的一部分:

代码语言:javascript
复制
algs %>% 
  str_view_all("(?<!svmLinear2|C5.0)[:digit:]{1,2}$")

对于最初名字中没有数字的算法,工作得很好,但似乎不适用于我试图消极查找的算法。

我尝试了一个积极的回顾,看看这将如何影响匹配(知道它在gamSpline34bagEarth8上不起作用):

代码语言:javascript
复制
algs %>% 
  str_view_all("(?<=svmLinear2|C5.0)[:digit:]{1,2}$")

这对于那些原始名称中包含数字的算法非常有效,但我不知道如何将这个正则表达式与从算法中捕获原始名称中没有任何数字的数字结合起来。

我试图以某种方式组合这两个正则表达式,但我不确定如何组合。我曾尝试在|([:digit:]{1,2}$)中包含一个二级或正则表达式,但匹配变得过于贪婪。

因此,需要匹配的是:

EN

回答 1

Stack Overflow用户

发布于 2019-12-09 04:42:47

我假设您有所有可能算法的列表。将其放入我调用的TrueNames列表中,然后在algs中查找算法名称。

代码语言:javascript
复制
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" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59239574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档