re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
To zwraca tylko wynik [89]
i muszę zwrócić cały 89%. Wszelkie pomysły, jak to zrobić, proszę?Python - re.findall zwraca niepożądany wynik
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
To zwraca tylko wynik [89]
i muszę zwrócić cały 89%. Wszelkie pomysły, jak to zrobić, proszę?Python - re.findall zwraca niepożądany wynik
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%']
>>> 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ą.
Czy zmiana '100 | [0-9] [0-9] | [0-9]' na "\ d {1,3}" zmieni cel wzoru? – Bryan
pomocą zewnętrzną grupę z grupą wewnętrznej non przechwytywania grupy:
>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
['89%']
sprawiają, że łańcuch; '" 89% "' –