我有一个字符串列表,下面显示了一个示例(实际列表的格式有更大的变化)
[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
答案 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"