2013-04-16 14 views

Odpowiedz

6

rozwiązanie trywialne:

>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%") 
['89%'] 

Piękniejsza rozwiązanie:

>>> re.findall("(100%|[0-9]{1,2}%)","89%") 
['89%'] 

Najładniejsza rozwiązanie:

>>> re.findall("(?:100|[0-9]{1,2})%","89%") 
['89%'] 
10
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%") 
['89%'] 

Gdy istnieją grupy przechwytywania findall powraca tylko captu czerwone części. Użyj ?:, aby zapobiec nawiązywaniu nawiasów przez grupę przechwytującą.

+0

Czy zmiana '100 | [0-9] [0-9] | [0-9]' na "\ d {1,3}" zmieni cel wzoru? – Bryan

2

pomocą zewnętrzną grupę z grupą wewnętrznej non przechwytywania grupy:

>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%") 
['89%'] 
Powiązane problemy