簡體   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