繁体   English   中英

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

[英]Regular expression matching repeating pattern across multiple lines

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

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

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

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

捕获文本的示例

您可能会节省一些时间,以弄清如果要分解的内容,如何用正则表达式解决整个问题:读两行,根据第一行中的数字确定需要转到的文件,然后继续进行下一个配对,直到解析了整个文件。 这样,您只需要一个非常简单的正则表达式即可从第一行获取数字: ^>.+?-(\\d+)$或什至是>.+-(\\d+)一次。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM