我试图匹配包含字符串的文件中的行ACTGGGTAAACTA
。如果我做
grep "ACTGGGTAAACTA" file
它给了我完全匹配的行。有没有办法允许一定数量的不匹配(替换,插入或删除)?例如,我正在寻找序列
曾经有一个名为agrep
的工具用于模糊正则表达式匹配,但它被放弃了。
http://en.wikipedia.org/wiki/Agrep有一些历史和相关工具的链接。
https://github.com/Wikinaut/agrep看起来像一个复活的开源版本,但我还没有测试过它。
如果做不到这一点,看看你是否能为你的发行版找到tre-agrep
。
您可以使用tre-agrep
并使用edit distance开关指定-E
。例如,如果你有一个文件foo
:
cat <<< EOF > foo
ACTGGGAAAATAAACTA
ACTAAACTA
ACTGGGTAAACTA
EOF
您可以将每行编辑距离最多匹配为9,如下所示:
tre-agrep -s -9 -w ACTGGGTAAACTA foo
输出:
4:ACTGGGAAAATAAACTA
4:ACTAAACTA
0:ACTGGGTAAACTA
简答:不。
答案很长:作为@JDB said,正则表达式本质上是精确的。你可以在某些地方手动添加[ATGC]
而不是A
这样的不匹配,但是没有办法只允许少量任何不匹配。我建议您编写自己的代码来解析它,或尝试在某处找到DNA解析器。
有一个名为fuzzysearch(我写的)的Python库,它提供了所需的功能。
以下是一些应该有效的示例代码:
from fuzzysearch import find_near_matches
with open('path/to/file', 'r') as f:
data = f.read()
# 1. search allowing up to 3 substitutions
matches = find_near_matches("ACTGGGTAAACTA", data, max_substitutions=3)
# 2. also allow insertions and deletions, i.e. allow an edit distance
# a.k.a. Levenshtein distance of up to 3
matches = find_near_matches("ACTGGGTAAACTA", data, max_l_dist=3)