我有一个带有标题(用“>”表示)的文件,下一行是文本。我需要捕获标题中包含相同数字的组。在下面的示例文本中,我想将前四行(两个标题都包含“4471”)打印到一个文件,将最后四行(标题包含“4527”)打印到另一个文件。>VUSY-4471AAAGTAATTCAGGATGAAGAGAGACTGCT>XFJG-4471AATGTTATTCAAGATGAAGATAGGTTGCTGGCTGCA>Ambtr-4527GAGGAGCGGGTGATTGCCTTGGTCGTTGGTGGTGG>Arath-4527GAAGAGAGAGTGAATGTTCTTGTA在文本编辑器中测试时,以下正则表达式成功捕获了文本组(见屏幕截图),但我似乎无法使其在 python 脚本中工作。任何帮助将不胜感激!!>.+?-(\d+)[\S\s]+>.+-\1\n.+捕获的文本示例
2 回答

holdtom
TA贡献1805条经验 获得超10个赞
仅仅提取一串数字,这个正则表达式似乎有点过于复杂。这是一个更简单的正则表达式的解决方案
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

眼眸繁星
TA贡献1873条经验 获得超9个赞
如果你分解你想要做的事情,你可能可以节省一些时间来弄清楚如何用正则表达式解决整个问题:阅读两行,根据第一行中的数字决定它需要转到哪个文件,然后继续下一个对,直到整个文件都被解析。这样,您只需要一个非常简单的正则表达式即可从第一行获取数字:^>.+?-(\d+)$
或者甚至只是>.+-(\d+)
一次执行一行。
添加回答
举报
0/150
提交
取消