正则表达式匹配多行重复模式

时间:2019-02-08 02:57:18

标签: python regex

我有一个文件头,文件头(用'>'表示),下一行是文本。我需要捕获标题中包含相同数字的组。在下面的示例文本中,我想将前四行(两个标头都包含“ 4471”)打印到一个文件,并将后四行(标头包含“ 4527”)打印到另一个文件。

>VUSY-4471
AAAGTAATTCAGGATGAAGAGAGACTGCT
>XFJG-4471
AATGTTATTCAAGATGAAGATAGGTTGCTGGCTGCA
>Ambtr-4527
GAGGAGCGGGTGATTGCCTTGGTCGTTGGTGGTGG
>Arath-4527
GAAGAGAGAGTGAATGTTCTTGTA

以下正则表达式在文本编辑器中测试时成功捕获了文本组(请参见屏幕截图),但是我似乎无法使其在python脚本中工作。任何帮助将不胜感激!

>.+?-(\d+)[\S\s]+>.+-\1\n.+

捕获的文本示例

2 个答案:

答案 0 :(得分:0)

如果分解您要尝试做的事情,您可能可以节省一些时间来弄清楚如何使用正则表达式解决整个问题:读两行,根据中的数字确定需要转到的文件。第一行,然后转到下一对,直到解析了整个文件。这样,您只需要一个非常简单的正则表达式就可以从第一行:^>.+?-(\d+)$中获得数字,如果一次要一行,甚至只需>.+-(\d+)

答案 1 :(得分:0)

该正则表达式似乎过于复杂,因为它仅提取一串数字。这是使用更简单的正则表达式的解决方案

import re

pat = re.compile(r'(\d+)')

with open('infile.txt') as infile:
    for line in infile:
        num = pat.findall(line)[0]
        with open(digits+".txt", "a+") as f:
            f.write(line)
            f.write(next(infile))  # This assumes an even number of lines in the input file