Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 基于grep的模糊字符串匹配_Regex_Shell_Pattern Matching - Fatal编程技术网

Regex 基于grep的模糊字符串匹配

Regex 基于grep的模糊字符串匹配,regex,shell,pattern-matching,Regex,Shell,Pattern Matching,我试图匹配包含字符串的文件中的行,比如说actggaaacta。如果 我知道 它给了我精确匹配的行。是否有办法允许某些数量的不匹配(替换、插入或删除)?例如,我正在寻找序列 最多3个允许的子项,如“AGTGGGTAACCAA”等 插入/删除(部分匹配,如“actgggaaataaacta”或“ACTAAACTA”) 简短回答:否 长答案:同样,正则表达式本质上是精确的。您可以在某些位置手动添加不匹配项,如[ATGC],而不是A,但无法只允许少量的不匹配项。我建议您编写自己的代码来解析它,或者尝试

我试图匹配包含字符串的文件中的行,比如说
actggaaacta
。如果 我知道

它给了我精确匹配的行。是否有办法允许某些数量的不匹配(替换、插入或删除)?例如,我正在寻找序列

  • 最多3个允许的子项,如“AGTGGGTAACCAA”等

  • 插入/删除(部分匹配,如“actgggaaataaacta”或“ACTAAACTA”)


  • 简短回答:否


    长答案:同样,正则表达式本质上是精确的。您可以在某些位置手动添加不匹配项,如
    [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