Zestawy znaków w wyrażeniach regularnych Pythona
Grupy znaków \d i \w nie
są zbyt elastyczne. Nawet takie proste zadanie,
jak znaleźć wszystkie litery, ale nie cyfry -
nie może być przez nie rozwiązane. Do takich zadań
należy używać nawiasów kwadratowych,
reprezentujących operację 'lub'.
Nawiasy kwadratowe zastępują jeden
znak, dowolny z wymienionych wewnątrz. Na
przykład, w ten sposób: x[abc]x -
mówimy, że na brzegach muszą stać litery
x, a wewnątrz - jeden znak: lub 'a',
lub 'b', lub 'c'.
Po nawiasach kwadratowych można pisać
operatory powtórzeń. Na przykład, w ten sposób:
x[abc]+x - mówimy, że wewnątrz
x może być dowolna liczba znaków
'a', 'b' i 'c' - w
dowolnych kombinacjach.
Można nie tylko wymieniać znaki, ale
tworzyć grupy znaków, zapisując między
dwoma znakami myślnik. Na przykład, w ten sposób:
[a-d] - otrzymujemy wszystkie znaki od
'a' do 'd'.
Spójrzmy na przykłady.
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'a' do 'z':
Wynik wykonania kodu:
'! ! ! x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'a' do 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! xmx x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'A' do 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Wynik wykonania kodu:
'xax ! xcx x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna cyfra od 0
do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Wynik wykonania kodu:
'xax ! ! ! x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna cyfra od 3
do 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Wynik wykonania kodu:
'xax x1x ! ! x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'a' do 'z' lub cyfra od
1 do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! ! x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'a' do 'z' lub litera od
'A' do 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! x5x x@x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x dowolna litera od
'a' do 'z' lub cyfry 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! ! x3x'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda
następująco: pomiędzy x litery od 'a'
do 'z' w liczbie od 1 i
więcej:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Wynik wykonania kodu:
'xx ! ! ! x123x xa3x'
Przykład
Sprawmy, aby liczba liter mogła być również zero:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
W wyniku otrzymamy:
'! ! ! ! x123x xa3x'
Przykład
Wewnątrz nawiasów kwadratowych można również wskazywać znaki specjalne. Znajdźmy sekwencję liter i cyfr, powtarzającą się zero lub więcej razy:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Wynik wykonania kodu:
'! x@x ! ! !'
Przykład
Jeśli potrzebujemy wskazać jeszcze jedne nawiasy kwadratowe, to również musimy je poprzedzić znakiem ucieczki:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! ! x3x'
Zadania praktyczne
Dany jest ciąg:
txt = 'aba aea aca aza axa'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - litera 'b',
'e' lub 'x'.
Dany jest ciąg:
txt = 'a1a a3a a7a a9a aba'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - cyfra od
3 do 6.
Dany jest ciąg:
txt = 'aba aea afa aha aga'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - litera od
'a' do 'g'.
Dany jest ciąg:
txt = 'aba aea afa aha aga'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - litera od
'a' do 'f' i od 'j'
do 'z'.
Dany jest ciąg:
txt = 'aAa aea aEa aJa a3a'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - litera od
'a' do 'f' i od 'A'
do 'D'.
Dany jest ciąg:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - małe
litery łacińskie, nie dotykając pozostałych.
Dany jest ciąg:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - małe i
duże litery łacińskie, nie dotykając
pozostałych.
Dany jest ciąg:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napisz wyrażenie regularne, które znajdzie według
następującego wzorca: na brzegach stoją litery
'a', a między nimi - małe
litery łacińskie i cyfry, nie dotykając
pozostałych.