2013-03-11 5 views
1

Предположим, что мы имеем это:найти несколько регулярных выражений в одной строке

html = 'http://example.com' 
regex = '<(\d{0,2})>' 
regex1 = '<span>(.+?)</span>' 
p = re.compile(regex) 
p1 = re.compile(regex1) 

Можно ли re.findall как p и p1 в одном findall заявлении?

+0

не мог 't вы просто используете 'regex =' (<(\d{0,2})> | (. +?)) ''? –

+0

Не уверен, что это сработает. Мне нужно найти оба (всегда есть оба), и когда python приближается к первому и оценивает значение True, то пропустит второй оператор, который я предполагаю. – nutship

+0

О, я вижу ... В этом случае я не уверен, что документация на Python говорит, что findall возвращает все совпадающие совпадения. Возможно, есть способ, но я не знаю одного - если нет, можете ли вы рассмотреть возможность объединения двух массивов результатов? –

ответ

1

Прежде всего: вы вообще не хотите использовать регулярные выражения для анализа HTML. Вместо этого вы действительно хотите использовать парсер HTML. BeautifulSoup позволяет искать элементы с определенным текстом, содержащимся (даже с использованием регулярных выражений для согласования конкретных аспектов, найденных в HTML)

Вы можете объединить регулярные выражения, используя | трубу, в группе:

p_or_p1 = re.compile('(?:{}|{})'.format(p, p1)) 
+0

Спасибо за совет парсера HTML. Я, конечно же, попытаюсь это узнать, но пока не сделаю, я как бы привязался к регулярному выражению, по крайней мере, для текущего проекта. Кстати. можете ли вы рекомендовать какой-либо полезный URL-адрес для парсера HTML, за исключением официальной документации? – nutship

+0

Я не могу рекомендовать учебники BeautifulSoup, потому что я никогда не читал их сам. :-) Документация довольно проста; вы всегда можете просмотреть вопросы здесь, на SO (я ответил на большое количество вопросов BS). –