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:

pythontxt = '1 12 123'
res = re.sub('\d', '!', txt)

print(res)

Wynik wykonania kodu:

python'! !! !!!'

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:

pythontxt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! ! 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:

pythontxt = '123abc3@@'
res = re.sub('\D+', '!', txt)

print(res)

Wynik wykonania kodu:

python'123!3!'

Przykład

W tym przykładzie wzorzec wyszukiwania wygląda tak: znak spacji jeden raz:

pythontxt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)

print(res)

Wynik wykonania kodu:

python'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 '!':

pythontxt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! ! ! !'

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 '!':

pythontxt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! ! ! @@@'

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:

pythontxt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)

print(res)

Wynik wykonania kodu:

python'1!12!123!Abc!'

Zadania praktyczne

Задание 1

Dany jest ciąg:

pythontxt = '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.

Задание 2

Dany jest ciąg:

pythontxt = '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.

Задание 3

Dany jest ciąg:

pythontxt = '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').

Задание 4

Dany jest ciąg:

pythontxt = '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.

Задание 5

Dany jest ciąg:

pythontxt = '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.

Задание 6

Dany jest ciąg:

pythontxt = 'ave a#a a2a a$a a4a a5a a-a aca'

Napisz wyrażenie regularne, które zamieni wszystkie spacje na '!'.