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

2024-09-26 04:56:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

下面的regex在文本编辑器中测试时成功地捕获了文本组(参见屏幕截图),但我似乎无法在python脚本中使用它。任何帮助都将不胜感激

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

捕获文本示例


Tags: 文件文本gt标题示例头文件数字arath
2条回答

如果你分解了你要做的事情,你也许可以节省一些时间来弄清楚如何用正则表达式解决整个问题:读两行,根据第一行中的数字决定它需要转到哪个文件,然后转到下一对,直到整个文件被解析。这样,您只需要一个非常简单的正则表达式就可以从第一行获得数字:^>.+?-(\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

相关问题 更多 >