Регулярное выражение Python — выбор значения на основе окружающих шаблонов

Я очистил веб-страницу с помощью Scrapy, и мне нужно извлечь цвет фона из определенных объектов. Поскольку inline-css не является частью DOM, или я так читал, мне нужно создать регулярное выражение, которое дополнит мой текущий XPath и выберет необходимое значение в атрибуте стиля объекта. Мой текущий XPath возвращает все значение стиля следующим образом:

фон:#80FF00;высота:48px;ширина:98px;цвет:#FFFFFF

Мне нужно регулярное выражение, которое будет выбирать только шестнадцатеричное значение фона (например: # 80FF00). Мне не нужно проверять правильность форматирования значения (т.е. ([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}))\b ), мне просто нужно захватить все, что находится между 'background:' и следующим ';'.

Я новичок в написании регулярных выражений и ценю помощь.


person Clayton    schedule 08.12.2011    source источник


Ответы (1)


Следующее регулярное выражение должно делать то, что вы хотите, материал, который вы хотите захватить, будет в первой группе захвата:

background:(.*?);

В Питоне

background = re.search(r'background:(.*?);', some_string).group(1)

. соответствует любому символу, * означает повторение предыдущего элемента любое количество раз, а ? делает его ленивым, поэтому он будет соответствовать как можно меньшему количеству символов. Это необходимо, чтобы убедиться, что он не захватывает несколько точек с запятой и останавливается только на последней. Альтернативой может быть background:([^;]*), так как [^;] будет соответствовать только символам, не являющимся точками с запятой.

person Andrew Clark    schedule 08.12.2011
comment
Спасибо FJ... отлично работает. Для тех, кто реализует это с помощью Scrapy, обратите внимание, что .group(1) не требуется. - person Clayton; 09.12.2011