Zanurkuj w Pythonie/Analiza przypadku: Przetwarzanie numerów telefonów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m podwójne </nowiki>
Fservant (dyskusja | edycje)
m Poprawionych wiele drobnych błędów (interpunkcyjnych, gramatycznych, semantycznych).
Linia 1:
== Analiza przypadku: Przetwarzanie numerów telefonów ==
 
Do tej pory koncentrowaliśmy się na dopasowywaniu całych wzorców. Albo pasowałpasowały, albo nie. Ale wyrażenia regularne są dużo potężniejsze. Gdy zostaniezostaną dopasowane, można wyciągnąć z niegonich wybrane kawałki i dzięki temu sprawdzić, co i gdzie zostało dopasowane.
 
Oto kolejny przykład z życia wzięty, z jakim można się spotkać: przetwarzanie amerykańskich numerów telefonów. Klient chciał móc wprowadzać numer w dowolnej formie w jednym polu, ale potem chciał, żeby przechowywać oddzielnie numer kierunkowy, numer w dwóch częściach i opcjonalny numer wewnętrzny w bazie danych firmy. W Internecie można znaleźć wiele takich wyrażeń regularnych, ale żadne z nich nie jest aż tak bardzo restrykcyjne.
 
Oto przykłady numerów telefonów, jakie miał program miał przetwarzać:
* 800-555-1212
* 800 555 1212
Linia 16:
* work 1-(800) 555.1212 #1234
 
Całkiem duże zróżnicowanie! W każdym z tych przypadków musimy wiedzieć, że numerem kierunkowykierunkowym jest 800, że pierwszą częścią numeru jest 555, drugadrugą 1212, a dlanumerem tychwewnętrznym z(jeśli numeremistnieje) wewnętrznym- 1234.
 
Spróbujmy rozwiązać ten problem. Poniższy przykład pokazuje pierwszy krok.
Linia 92:
# Inne odmiany też działają np. numer rozdzielony kropkami ze spacją i <tt>x</tt>-em przed numerem wewnętrznym.
# Wreszcie udało się też rozwiązać problem z brakiem numeru wewnętrznego. Tak czy siak <tt>groups()</tt> zwraca nam krotkę z 4 elementami, ale ostatni jest tutaj pusty.
# Niestety jeszcze nie skończyliśmy. Co tutaj jest nie tak? Przed numerem kierunkowym znajduje się dodatkowy znak <tt>"("</tt>, a nasze wyrażenie zakłada, że numer kierunkowy znajduje się na samym przodzie. Nie ma problemu, możemy zastosować tę samą metodę, co do znaków rozdzielających.
}}
 
Linia 117:
 
{{Python/Przykład
|7.15|Numerze telefonu, znajdę cię, gdziekolwiek jesteś!
|tekst=
>>> phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') #(1)
Linia 135:
Widzimy, jak szybko wyrażenia regularne wymykają się spod kontroli? Rzućmy okiem na jedną z poprzednich przykładów. Widzimy różnice pomiędzy nim i następnym?
 
Póki jeszcze rozumiemy to, co napisaliśmy, rozpiszmyprzekształćmy to jakow rozwlekłe wyrażenie regularne, żeby nie zapomnieć, co jestodpowiada za co i dlaczego.
 
{{Python/Przykład