在R

时间:2017-01-25 02:37:12

标签: r

我有一个字符串列表,下面显示了一个示例(实际列表的格式有更大的变化)

[1]" AB-123"
[2]" AB-312"
[3]" AB-546"
[4]" ZXC / 123456"

假设[1]是正确的格式,我想从[1]中提取正则表达式并将其与其余部分匹配以检测[4]是否不一致。有没有办法做到这一点,还是有更好的方法来实现相同的结果?

*编辑 - 我发现了一些接近我要求的东西,任何人都知道这样做的任何软件包? Given a string, generate a regex that can parse *similar* strings

2 个答案:

答案 0 :(得分:0)

我们可能需要grep

 grepl(sub("-.*", "", v1[1]), v1[-1])

数据

v1 <- c( "AB-123" , "AB-312" ,  "AB-546" , "ZXC/123456")

答案 1 :(得分:0)

此处尝试创建一个函数,用于检查每个值是C字符D igit还是O。这有点粗糙,但我确信这可以扩展到完全匹配你想要的东西:

test <- c("AB-123", "AB-312", "AB-546", "ZXC/123456")

compare_1st <- function(x) {
  x <- toupper(x)
  chars <- list("A",1,"-")
  repl  <- c("[A-Z]", "[0-9]", "[^0-9A-Z]")
  for(i in seq_along(repl)) x <- gsub(repl[i], chars[i], x)
  out <- x[1] == x
  attr(out, "values") <- chartr("A1-", "CDO", x)
  out
}

compare_1st(test)
#[1]  TRUE  TRUE  TRUE FALSE
#attr(,"values")
#[1] "CCODDD"     "CCODDD"     "CCODDD"     "CCCODDDDDD"