Регулярное выражение Python, проверяющее длину строки на наличие двух дискретных значений - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь проверить строку на наличие шаблона, длина которого может быть 3 или 6;не значения между ними.

Это строка:

color: #FfFdF8; background-color:#aef;

Я хочу получить все подстроки, начинающиеся с #, за которыми следует шестнадцатеричный код, если они имеют длину 3 или 6 и являютсяне находится в начале строки;в этом случае должны быть возвращены #FfFdF8 и #aef.

Я написал этот шаблон:

r'^(?!#).+(#[a-fA-F0-9]{6}).*|^(?!#).+(#[a-fA-F0-9]{3}).*'

Но он дал мне [('#FfFdF8', '')] в результате re.findall.

1 Ответ

1 голос
/ 12 октября 2019

Вы можете сначала проверить, начинается ли строка с #, а если нет, извлечь подстроки #...:

import re
results = []
s = 'color: #FfFdF8; background-color:#aef;'
if not s.startswith('#'): 
    results = re.findall(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?\b', s)
print(results) # => ['#FfFdF8', '#aef']

См. Демонстрационную версию regex и Демо Python .

Regex детали

  • # - # char
  • [a-fA-F0-9]{3} - 3 гексаchars
  • (?:[a-fA-F0-9]{3})? - необязательная последовательность из трех шестнадцатеричных символов
  • \b - граница слова (больше не разрешены шестнадцатеричные символы справа)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...