R grepl变量比较

时间:2014-01-30 03:44:22

标签: regex string r grep string-comparison

只需要grepl的帮助,它就是我的头脑!

我有两个变量:

str1<-"AAV.L"
str2<-"AAV2.L"

我想要做的是检查str2str1的扩展名(在这种情况下是这样)。基本上,str2在其名称中有一个额外的"2" ..

理想情况下,解决方案类似于:

grepl(str1,paste0(str2,...))

但我不知道在.中考虑str1。变量的长度也不一样,所以我不能只检查str1str2的前3个字符是否存在。

有人有什么想法吗?

谢谢!

编辑 - 澄清..

基本上是“扩展”我的意思是如果一个变量包含完全相同的字母,而且更多,按相同的顺序。因此,上面的示例AAV.LAAV2.L会匹配,因为它包含AAV..L。它不一定是这样的,它应该REWRREWRLE匹配,也意味着REWR..

所以c("AAV.LE", "BAAV.L","AABV.L","AAV..L","ABCAV.L"),没有人会匹配。如果我把比赛的规则变成简单的英语,那就是:

str2是以str1开头还是str2str1的任何子集开头,以其他子集结尾?

我已经查看了agrep但是匹配得太不准确了。例如,AAV.LAAV2.L匹配哪个好,但是ADDAPUAD也是如此,这是不正确的!我知道我可以指定max.distance,但有些字符串可能是ADDADDDDDDDDD,这会使设置此值难以置信..

如果有帮助,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以在放入grepl之前删除点扩展名。

str1 <- sub("\\.[[:alnum:]]+$", "", str1);
## AAV

str2 <- sub("\\.[[:alnum:]]+$", "", str2);
## AAV2

注意:这是一种删除文件扩展名的方法。它不会删除点字符的任何其他出现。它的工作原理是替换一个句点的出现,后面只有字母数字字符,并从字符串的末尾搜索。它用空(“”)字符串替换它。

str3 <- "A.A.V.L"
str3 <- sub("\\.[[:alnum:]]+$", "", str3);
## A.A.V

然后,使用grepl

grepl(str1, str2)
## TRUE