如何与Perl进行不精确的字符串比较?

时间:2011-12-10 20:22:47

标签: regex string perl pattern-matching match

给定两个字符串,我想找到指定长度的所有常见子串,但允许一个字符不同。

例如,如果s1是'ATCAGC',s2是'ATAATCGAC',而指定的长度是3,那么我想要沿着这些行输出:

ATC from s1 matches ATA, ATC from s2
TCA from s1 matches TAA, TCG from s2

问题

  • 我可以使用简单的正则表达式吗?
  • 如果没有,Perl中是否有模块?

1 个答案:

答案 0 :(得分:3)

首先,谷歌搜索“perl hamming distance”的结果发现perlmonks thread提到了Text::LevenshteinXS,各种典型实现,以及一个可爱的xor技巧:

sub hd{ length( $_[ 0 ] ) - ( ( $_[ 0 ] ^ $_[ 1 ] ) =~ tr[\0][\0] ) }

如果不熟悉Levenshtein距离或汉明距离,您应该在String metrics上浏览维基百科文章。