Регулярное выражение в Python - PullRequest
1 голос
/ 02 июня 2010

ТАК, я пытаюсь создать простое регулярное выражение, соответствующее следующей строке:

>chrX:33267175-33267784 610bp TGATGTTTGGCGAGGAACTC GCAGAGTTTGAAGAGCTCGG
TGATGTTTGGCGAGGAACTCtactattgttacacttaggaaaataatcta
atccaaaggctttgcatctgtacagaagagcgagtagatactgaaagaga
tttgcagatccactgttttttaggcaggaagaatgctcgttaaatgcaaa
cgctgctctggctcatgtgtttgctccgaggtataggttttgttcgactg
acgtatcagatagtcagagtggttaccacaccgacgttgtagcagctgca
taataaatgactgaaagaatcatgttaggcatgcccacctaacctaactt
gaatcatgcgaaaggggagctgttggaattcaaatagactttctggttcc
cagcagtcggcagtaatagaatgctttcaggaagatgacagaatcaggag
aaagatgctgttttgcactatcttgatttgttacagcagccaacttattg
gcatgatggagtgacaggaaaaacagctggcatggaaggtaggattatta
aagctattacatcattacaaatacaattagaagctggccatgacaaagca
tatgtttgaacaagcagctgttggtagctggggtttgttgCCGAGCTCTT
CAAACTCTGC

Я создал следующее регулярное выражение:

[.|[\n]]*

пока он не будет соответствовать строке выше. У кого-нибудь есть решение этой головоломки и, возможно, обоснование того, почему это не работает.

Извините за форматирование этого вопроса.

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Хватит пытаться анализировать HTML с помощью регулярных выражений. Вы не можете сделать это (надежно). Есть причина, по которой этот знаменитый SO-ответ . Вместо этого используйте lxml .

1 голос
/ 03 июня 2010

Если вы собираетесь анализировать HTML, пожалуйста, используйте lxml, как предложил Хэнк.

Но чтобы это регулярное выражение работало, вам нужно изменить [] на (). * | внутри квадратных скобок интерпретируется как символ '|' а не как оператор ИЛИ.

Другой вариант - использовать флаг, который называется DOTALL , что позволяет оператору точки сопоставлять что угодно, включая символ новой строки. Таким образом, регулярное выражение становится очень простым:

m = re.match(r'(.*)
', input_string, re.DOTALL) m.group (1)

выводит строку внутри PRE без самих < PRE > и < /PRE >.

0 голосов
/ 07 сентября 2011

Проблема заключается в том, что внутри [] находится . точка, а не точка с соответствием; | - это труба, а не or; [ и ] - фигурные скобки, а не создатели класса символов - другими словами, специальные символы без обратной косой черты теряют свою особенность.

Что вы хотите сделать, это:

m = re.search(r'(.*
) ', input_string, re.DOTALL) m.group (1)

.search() будет искать всю строку в строке на совпадение (.match() проверяет только начало строки), а re.DOTALL (or re.S) также будет иметь . совпадения с новой строки. *

Если вы не хотите включать теги <PRE> и </PRE>, переместите скобки, чтобы заключить .*.

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