Регулярное выражение, соответствующее многострочному блоку текста
Это будет работать:
>>> import re
>>> rx_sequence=re.compile(r"^(.+?)\n\n((?:[A-Z]+\n)+)",re.MULTILINE)
>>> rx_blanks=re.compile(r"\W+") # to remove blanks and newlines
>>> text="""Some varying text1
...
... AAABBBBBBCCCCCCDDDDDDD
... EEEEEEEFFFFFFFFGGGGGGG
... HHHHHHIIIIIJJJJJJJKKKK
...
... Some varying text 2
...
... LLLLLMMMMMMNNNNNNNOOOO
... PPPPPPPQQQQQQRRRRRRSSS
... TTTTTUUUUUVVVVVVWWWWWW
... """
>>> for match in rx_sequence.finditer(text):
... title, sequence = match.groups()
... title = title.strip()
... sequence = rx_blanks.sub("",sequence)
... print "Title:",title
... print "Sequence:",sequence
... print
...
Title: Some varying text1
Sequence: AAABBBBBBCCCCCCDDDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHHHIIIIIJJJJJJJKKKK
Title: Some varying text 2
Sequence: LLLLLMMMMMMNNNNNNNOOOOPPPPPPPQQQQQQRRRRRRSSSTTTTTUUUUUVVVVVVWWWWWW
Некоторые multiline пояснения к этому регулярному regular-expressions выражению могут быть полезны: ^(.+?)\n\n((?:[A-Z]+\n)+)
- Первый символ (
^
) означает «начало с начала строки». Имейте в виду, что он не соответствует самой новой строке (то же самое для $: это означает «непосредственно перед новой строкой», но он не соответствует самой новой строке). - Тогда
(.+?)\n\n
означает «сопоставить как можно меньше символов (разрешены все символы), пока вы не дойдете до двух символов новой строки». Результат (без символов новой строки) помещается в первую группу. -
[A-Z]+\n
означает «сопоставить как можно больше заглавных букв, пока не дойдете до новой строки. Это определяет то, что я буду называть текстовой строкой. -
((?:
текстовая строка)+)
означает соответствие одной или нескольким текстовым строкам, но не помещает каждую строку в группу. Вместо этого поместите все текстовые строки в одну группу. - Вы можете добавить последний элемент
\n
в регулярное выражение, если хотите, чтобы в конце был двойной символ новой строки. - Кроме того, если вы не уверены, какой тип новой строки вы получите (
\n
или\r
или\r\n
), просто исправьте регулярное выражение, заменив каждое вхождение\n
на(?:\n|\r\n?)
.
python
regex
multiline
2021-12-16T03:09:11+00:00
2022-11-18T16:29:20+00:00
himovSerg
Вопросы с похожей тематикой, как у вопроса:
Регулярное выражение, соответствующее многострочному блоку текста
Предупреждение о файлах Cookies
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.