使用变量指定要匹配的字符数



我使用下面的表达式来提取字符串的一部分:

part <- sub("(^[a-zA-Z]{2}).*$", "\1", "My String", perl = T)
收益率

"My"

问题是我想使用一个变量来指定表达式中的重复次数,这样就不用

^[a-zA-Z]{2} 
我想要

^[a-zA-Z]{var}

var <- 2
part <- sub("(^[a-zA-Z]{var}).*$", "\1", "My String", perl = T)
收益率

"My String"

代替

"My"

我如何调整这个表达式,使var可以读取为2而不是 " var " ?我将非常感谢任何帮助。

我喜欢使用sprintf。如果var不是数字,它将抛出一个错误。

var <- 2
pat <- "(^[a-zA-Z]{%d}).*$"
pat <- sprintf(pat, var)

你可以这样做:

part <- sub(paste(sep="","(^[a-zA-Z]{",var,"}).*$"), "\1", "My String", perl=T)

如果我们使用gsubfn包中的fn$作为命令的开头,那么我们可以使用$var来引用要替换的变量:

library(gsubfn)
var <- 2
fn$sub("(^[a-zA-Z]{$var}).*$", "\1", "My String")

或使用来自同一包的strapplyc,在这种情况下,正则表达式可以简化:

fn$strapplyc("My String", "^[a-zA-Z]{$var}", simplify = TRUE)

我认为这只是一个例子,真正的问题要复杂得多,但如果这是真正的问题,那么使用substring:

可能更容易,也可能足够好
var <- 2
substring("My String", 1, var)

相关内容

  • 没有找到相关文章

最新更新