re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
Это возвращает только результат [89]
, и мне нужно вернуть все 89%. Есть идеи, как это сделать?
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
Это возвращает только результат [89]
, и мне нужно вернуть все 89%. Есть идеи, как это сделать?
Тривиальное решение:
>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%")
['89%']
Более красивое решение:
>>> re.findall("(100%|[0-9]{1,2}%)","89%")
['89%']
Самое красивое решение:
>>> re.findall("(?:100|[0-9]{1,2})%","89%")
['89%']
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%")
['89%']
При наличии групп захвата findall
возвращает только захваченные части. Используйте ?:
, чтобы круглые скобки не были группой захвата.
100|[0-9][0-9]|[0-9]
на \d{1,3}
назначение шаблона?
- person Bryan; 17.04.2013
Используйте внешнюю группу, а внутреннюю группу не захватывающую:
>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
['89%']
"89%"
- person   schedule 16.04.2013