为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2021-11-02 15:31:02
我有一个带有标题(用“>”表示)的文件,下一行是文本。我需要捕获标题中包含相同数字的组。在下面的示例文本中,我想将前四行(两个标题都包含“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



查看完整回答
反对 回复 2021-11-02
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号