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

时间:2013-03-27 16:44:39

标签: regex r text-extraction

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

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”?我非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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

答案 1 :(得分:1)

我喜欢使用sprintf。如果var不是数字,则会引发错误。

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

答案 2 :(得分:0)

如果我们在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)