Я новичок в Regex, поэтому я продолжаю практиковать, выполняя все упражнения, которые могу найти. В одном из них мне нужно извлечь все шестнадцатеричные коды из исходного кода HTML, используя Regex и Python. Согласно упражнению, правила определения шестнадцатеричного кода:
- Он начинается с #
- Он состоит из 3 или 6 цифр
- Каждая цифра вдиапазон 0-F (строка не чувствительна к регистру)
Пример ввода такой:
#BED
{
color: #FfFdF8; background-color:#aef;
font-size: 123px;
background: -webkit-linear-gradient(top, #f9f9f9, #fff);
}
#Cab
{
background-color: #ABC;
border: 2px dashed #fff;
}
Желаемый результат:
#FfFdF8
#aef
#f9f9f9
#fff
#ABC
#fff
#BED
и #Cab
должны быть опущены, поскольку они не являются шестнадцатеричными цветами.
Я попытался использовать этот код для решения проблемы:
import re
text = """
#BED
{
color: #FfFdF8; background-color:#aef;
font-size: 123px;
background: -webkit-linear-gradient(top, #f9f9f9, #fff);
}
#Cab
{
background-color: #ABC;
border: 2px dashed #fff;
} """
r = re.compile(r'#[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}')
a = r.findall(text)
print(a)
Полученный вывод:
['#BED', '#FfF', '#aef', '#f9f', '#fff', '#Cab', '#ABC', '#fff']
Работает нормально, за исключением того, что не перехватывает 6-значные коды и не устраняет два тега, которыена самом деле это не шестнадцатеричные цветовые коды.
Что я ошибаюсь? Я посмотрел на другие попытки, но они не дали правильный ответ. Я использую Python 3.7.4 и последнюю версию PyCharm.