Regex 基于grep的模糊字符串匹配
我试图匹配包含字符串的文件中的行,比如说Regex 基于grep的模糊字符串匹配,regex,shell,pattern-matching,Regex,Shell,Pattern Matching,我试图匹配包含字符串的文件中的行,比如说actggaaacta。如果 我知道 它给了我精确匹配的行。是否有办法允许某些数量的不匹配(替换、插入或删除)?例如,我正在寻找序列 最多3个允许的子项,如“AGTGGGTAACCAA”等 插入/删除(部分匹配,如“actgggaaataaacta”或“ACTAAACTA”) 简短回答:否 长答案:同样,正则表达式本质上是精确的。您可以在某些位置手动添加不匹配项,如[ATGC],而不是A,但无法只允许少量的不匹配项。我建议您编写自己的代码来解析它,或者尝试
actggaaacta
。如果
我知道
它给了我精确匹配的行。是否有办法允许某些数量的不匹配(替换、插入或删除)?例如,我正在寻找序列
简短回答:否
长答案:同样,正则表达式本质上是精确的。您可以在某些位置手动添加不匹配项,如
[ATGC]
,而不是A
,但无法只允许少量的不匹配项。我建议您编写自己的代码来解析它,或者尝试在某处找到一个DNA解析器。过去有一个名为agrep
的工具用于模糊正则表达式匹配,但它被放弃了
有一点历史和相关工具的链接
看起来像是一个恢复的开源版本,但我还没有测试它
否则,请查看是否可以为您的发行版找到
tre-agrep
。您可以使用tre-agrep
并使用-E
开关指定。例如,如果您有一个文件foo
:
cat <<< EOF > foo
ACTGGGAAAATAAACTA
ACTAAACTA
ACTGGGTAAACTA
EOF
输出:
4:ACTGGGAAAATAAACTA
4:ACTAAACTA
0:ACTGGGTAAACTA
有一个名为(我写的)的Python库,它正好提供了所需的功能 下面是一些应该可以工作的示例代码:
从fuzzysearch导入查找匹配项附近的\u
将open('path/to/file','r')作为f:
data=f.read()
# 1. 允许最多3次替换的搜索
匹配=查找匹配附近的匹配(“ACTGGGTAAACTA”,数据,最大替换=3)
# 2. 还允许插入和删除,即允许编辑距离
#a.k.a.Levenshtein距离不超过3
匹配项=查找匹配项附近的匹配项(“ACTGGGTAAACTA”,数据,最大距离=3)
您的意思是“查找ACTGGGTAAACTA或最多更改3个字母的序列”吗?正则表达式不是模糊匹配工具。你必须非常准确地知道你到底在寻找什么。您可以明确声明某些字符可能丢失(例如,ACTGGGTA{1,3}CTA
可以匹配ACTGGGTA
,ACTGGGTAACTA
和ACTGGGTAAACTA
),但您的正则表达式越“模糊”,您最终得到的不希望的匹配就越多。可能类似于
tre-agrep -s -9 -w ACTGGGTAAACTA foo
4:ACTGGGAAAATAAACTA
4:ACTAAACTA
0:ACTGGGTAAACTA