Grupy znaków w wyrażeniach regularnych Pythona
Istnieją specjalne komendy, które
pozwalają wybrać od razu całe grupy
znaków. Komenda \d oznacza cyfrę
od 0 do 9. Komenda \w
oznacza cyfrę, literę łacińską lub znak
podkreślenia. Komenda \s oznacza
spację lub znak spacji: spację,
znak nowej linii, tabulację. Można odwrócić
znaczenie komendy, pisząc dużą literę:
na przykład, jeśli \d - cyfra, to
\D - nie cyfra.
Przykład
Znajdźmy wszystkie cyfry:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Wynik wykonania kodu:
'! !! !!!'
Przykład
Operatory powtórzenia traktują komendy-grupy
jako całość, to znaczy nawiasy grupujące
nie są potrzebne. W następnym przykładzie wzorzec wyszukiwania
wygląda tak: cyfra od 0 do
9 jeden lub więcej razy:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! abc @@@'
Przykład
W następnym przykładzie wzorzec wyszukiwania wygląda
tak: cokolwiek jeden lub więcej razy,
ale nie cyfra od 0 do 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Wynik wykonania kodu:
'123!3!'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak: znak spacji jeden raz:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Wynik wykonania kodu:
'1!12!123!abc!@@@'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
tak: NIE znak spacji jeden lub więcej
razy. Wszystkie podciągi, oddzielone
spacjami, zostaną zastąpione na '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! ! !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
tak: cyfra lub litera jeden lub więcej
razy. Wszystkie podciągi, składające się z cyfr
i liter, zostaną zastąpione na '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! ! @@@'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
tak: NIE cyfra i NIE litera jeden lub więcej
razy. Na tę definicję w naszym
przypadku trafia '@@@' i wszystkie spacje
(one przecież też nie są cyframi ani literami).
Zwróć uwagę na to, że na końcu jedna
'!' - w nią przekształcił się ciąg
' @@@' - ze spacją na początku:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Wynik wykonania kodu:
'1!12!123!Abc!'
Zadania praktyczne
Dany jest ciąg:
txt = 'a1a a2a a3a a4a a5a aba aca'
Napisz wyrażenie regularne, które znajdzie ciągi,
w których na brzegach stoją litery 'a',
a między nimi jedna cyfra.
Dany jest ciąg:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Napisz wyrażenie regularne, które znajdzie ciągi,
w których na brzegach stoją litery 'a',
a między nimi dowolna liczba cyfr.
Dany jest ciąg:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Napisz wyrażenie regularne, które znajdzie ciągi,
w których na brzegach stoją litery 'a',
a między nimi dowolna liczba cyfr (w tym
również zero cyfr, to znaczy ciąg
'aa').
Dany jest ciąg:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Napisz wyrażenie regularne, które znajdzie ciągi
następującego rodzaju: na brzegach stoją litery
'a' i 'b', a między nimi -
nie liczba i nie spacja.
Dany jest ciąg:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Napisz wyrażenie regularne, które znajdzie ciągi
następującego rodzaju: na brzegach stoją litery
'a' i 'b', a między nimi -
nie litera, nie cyfra i nie spacja.
Dany jest ciąg:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Napisz wyrażenie regularne, które zamieni wszystkie
spacje na '!'.