Prośba o wytłumaczenie linijki kodu...

0

Witam. Robię pythonchallenge, i zrobiłem zadanie 3 (3 duże litery z każdej strony 1 małej)
Na samym końcu sprawdziłem sobie z przykładową odpowiedzią z innej strony, niestety mój kod ma 20+ linijek, a w przykładowej odpowiedzi są 3 linijki..

Znalazłem oto taki kod:

print "".join(re.findall("[^A-Z]+[A-Z]{3}([a-z])[A-Z]{3}[^A-Z]+", data))

Chciałbym się dowiedzieć (prośba o karkołomne znaczek po znaczku w tym nawiasie po findall) jak to działa, mniej więcej się domyślam ale nie mogę pojąć jak to wyszukuje w 4 stronach (góra/dół/lewo/prawo) te literki
Z góry dziękuje ;)

1

Nie możesz wygooglać sobie tutoriala do wyrażeń regularnych?

[^A-Z]+

jedno lub więcej wystąpień dowolnego znaku który nie należy do przedziału od A do Z

[A-Z]{3}

3 dowolne znaki z zakresu od A do Z

([a-z])

jeden znak z zakresu od a do z, który sobie "łapiemy" (po to ten nawias ;) )

[A-Z]{3}

3 dowolne znaki z zakresu od A do Z

[^A-Z]+

jedno lub więcej wystąpień dowolnego znaku który nie należy do przedziału od A do Z

Więc efektywnie ten kod łapie dowolne ciągi w stylu:
$%^^&&%ALAxELA&*&^&
wyłapując z takiego ciągu literkę 'x'

Sam findall() po prostu przelatuje po kolei po ciągu danych wejściowych i próbuje dopasować sobie pattern do danych wejściowych i jak trafi mu się podciąg pasujący to do listy wyników dorzuca to co było łapane (co to było w nawiasach w wyrażeniu regularnym) i potem szuka dalej pasujących ciągów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1