猿问

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

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


>VUSY-4471

AAAGTAATTCAGGATGAAGAGAGACTGCT

>XFJG-4471

AATGTTATTCAAGATGAAGATAGGTTGCTGGCTGCA

>Ambtr-4527

GAGGAGCGGGTGATTGCCTTGGTCGTTGGTGGTGG

>Arath-4527

GAAGAGAGAGTGAATGTTCTTGTA

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


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

捕获的文本示例

蝴蝶不菲
浏览 324回答 2
2回答

holdtom

仅仅提取一串数字,这个正则表达式似乎有点过于复杂。这是一个更简单的正则表达式的解决方案import repat = 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

眼眸繁星

如果你分解你想要做的事情,你可能可以节省一些时间来弄清楚如何用正则表达式解决整个问题:阅读两行,根据第一行中的数字决定它需要转到哪个文件,然后继续下一个对,直到整个文件都被解析。这样,您只需要一个非常简单的正则表达式即可从第一行获取数字:^>.+?-(\d+)$或者甚至只是>.+-(\d+)一次执行一行。
随时随地看视频慕课网APP

相关分类

Python
我要回答