Регулярное выражение совпадает с повторяющимся шаблоном в нескольких строках - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть файл с заголовком (обозначенным '>'), за которым следует текст на следующей строке.Мне нужно захватить группы, которые содержат одинаковые номера в заголовке.В приведенном ниже примере текста я хотел бы напечатать первые четыре строки (оба заголовка содержат «4471») в один файл, а последние четыре строки (заголовки содержат «4527») - в другой файл.

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

Следующее регулярное выражение успешно захватывает группы текста при тестировании в текстовом редакторе (см. Скриншот), но я не могу заставить его работать в скрипте Python.Любая помощь будет принята с благодарностью !!

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

Пример захваченного текста

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Это регулярное выражение кажется немного сложным для простого извлечения строки из цифр.Вот решение с более простым регулярным выражением

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
0 голосов
/ 08 февраля 2019

Вы, вероятно, можете сэкономить некоторое время, разбираясь в том, как решить всю проблему с помощью регулярных выражений, если разбиваете то, что пытаетесь сделать: прочитайте две строки, решите, к какому файлу нужно перейти, основываясь на числе впервая строка, затем переходите к следующей паре, пока весь файл не будет проанализирован.Таким образом, все, что вам нужно, это очень простое регулярное выражение, чтобы получить число из первой строки: ^>.+?-(\d+)$ или даже просто >.+-(\d+), если вы делаете это строкой за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...