通过模糊匹配(替代)提高正则表达式的性能

时间:2019-02-27 09:58:52

标签: python regex python-3.x

遍历非常大的文件(10+ GB),以查找并删除特定的字母序列。 代码基本上是以下形式:

with open(file1) as r1:
    with open(file2) as r2:
        for lines in grouper(zip(r1,r2), 4, ''):
            r1_seq = lines[1][0].strip()
            r2_seq = lines[1][1].strip()
            umi = r2_seq[0:11]
            umilen = len(umi)
            r1_seq_len = len(r1_seq)
            while umilen > 0:
                errorLimit = umilen // 5
                if regex.fullmatch("(?:"+umi+"){s<="+str(errorLimit)+"}",r1_seq[(r1_seq_len-umilen):]) != None:
                    r1_seq_st = r1_seq[:(0-umilen)]
                    break
                else:
                    if umilen == 1:
                        r1_seq_st = r1_seq
                        break
                    else:
                        umi = umi[:-1]
                        umilen = len(umi)
            r1_processed.write(r1_seq_st)
            r2_processed.write(r2_seq)

此代码效率很低,因为它需要几个小时。 但是,一种简单的替换方法正在更改:

if regex.fullmatch("(?:"+umi+"){s<="+str(errorLimit)+"}",r1_seq[(r1_seq_len-umilen):]) != None:

收件人:

if r1_seq[(r1_seq_len-umilen):] == umi:

显着加快速度(从50MB文件的4分钟增加到4秒)。 因此,似乎瓶颈在于尝试使用正则表达式而不是简单的比较(不允许替换)来进行替换匹配。

总有没有办法使这种与替换的正则表达式比较有效得多?

0 个答案:

没有答案