我使用下面的表达式来提取字符串的一部分:
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)