2014-10-11 1 views
0

Я использую REGEX для компиляции списка строк из HTML-документа в Python. Эти строки находятся внутри тега td (<td>SOME OF THE STRINGS COULD BE HERE</td>) или внутри тега div (<div style="line-height: 100%;margin:0;padding:0;">SOME STRINGS COULD ALSO BE HERE</div>).Объединение двух REGEX в Python для компиляции

Поскольку порядок строк в конечном списке должен соответствовать порядку, в котором они отображаются внутри HTML-документа, я ищу REGEX, который позволит мне скомпилировать все эти строки, учитывая оба возможных случая.

Я знаю, как сделать это в индивидуальном порядке с чем-то, что выглядит как:

FindStrings = re.compile('(?<=\<td>)(.*?)(?=\</td>)') 
MyList = re.findall(FindStrings, str(mydocument)) 

для первого случая, но хотел бы знать наиболее эффективный способ объединить оба случая в уникальном Regex.

+1

Почему вы не используете beautifulsoup? –

ответ

1

Вы можете комбинировать регулярное выражение с помощью регулярных выражений ИЛИ. Btw, вам не нужно использовать регулярные выражения.

Вы можете использовать это регулярное выражение:

<td>(.+?)</td>|<div.*?>(.+?)</div> 

Working demo

enter image description here

Match информация

MATCH 1 
1. [4-37] `SOME OF THE STRINGS COULD BE HERE` 
MATCH 2 
2. [94-125] `SOME STRINGS COULD ALSO BE HERE` 
QUICK REFERENCE 

Код:

>>> import re 
>>> s = """<td>SOME OF THE STRINGS COULD BE HERE</td> 
... <div style="line-height: 100%;margin:0;padding:0;">SOME STRINGS COULD ALSO BE HERE</div> 
... """ 
>>> m = re.findall(r'<td>(.+?)</td>|<div.*?>(.+?)</div>', s) 
>>> m 
[('SOME OF THE STRINGS COULD BE HERE', ''), ('', 'SOME STRINGS COULD ALSO BE HERE')] 
>>> [s for s in x if s for x in m] 
['SOME STRINGS COULD ALSO BE HERE', 'SOME STRINGS COULD ALSO BE HERE'] 
+0

Кажется, сделать половину выполняемой работы ... Я получаю список нескольких строк строк, в том числе пустой. [('', 'Одна из строк'), ('', 'Another one'), ...] – LaGuille

+0

Привет @LaGuille, как вы можете видеть на скриншоте, нужны обе необходимые строки –