2013-07-30 2 views
1

У меня есть образец, который я пытаюсь сопоставить, используя re.compile. Однако я не могу заставить скрипт дать желаемый результат. Ниже приведен пример некоторого HTML-кода, который я надеюсь скрестить, из нижнего HTML я надеюсь создать два элемента списка.Как исправить это нерабочее соответствие шаблону регулярного выражения?

Также ниже моя попытка выбора двух элементов списка:

import re 

def getData(): 

    trans_array = "" ##HTML data here 
    pattern2 = re.compile('<table width="100%" border="0" class="tbl t3 mobile-collapse">(.*)</table>') 

    print re.findall(pattern2, trans_array) 

getData() 

У меня такое ощущение, что код я должен работать, но это не имеет. Любые советы или комментарии будут оценены.

+2

Вы должны использовать модификатор S 're.S' для соответствия новым строкам с точками' .'. Кроме того, не забудьте сделать ваше выражение неровным '(. *?)' – HamZa

ответ

3

По умолчанию . в регулярном выражении не соответствует новым строковым символам. Добавьте параметр flags=re.S в re.compile, и вы regexp будете работать.

1

Если вы не сообщите об этом иначе, то . в Regex не будет соответствовать новой строке. Однако, вместо того, чтобы использовать flags=re.S, чтобы исправить это, я думаю, что чистое решение было бы просто использовать Regex синтаксис себя:

re.compile('(?s)<table width="100%" border="0" class="tbl t3 mobile-collapse">(.*?)</table>') 

(?s) делает то же самое, как flags=re.S.

Кроме того, я думаю, вы хотите, чтобы ваши совпадения не соответствовали максимальному соответствию. Это делается с использованием (.*?) вместо (.*)

Смежные вопросы