Myślnik wewnątrz zbiorów w wyrażeniach regularnych Pythona

Myślnik - też jest znakiem specjalnym wewnątrz [ ] (ale na zewnątrz - nie). Jeśli potrzebujesz samego myślnika jako symbolu - umieść go tam, gdzie nie zostanie odebrany jako separator grup.

Dlaczego to ważne: możesz utworzyć grupę symboli, sam tego nie zauważając. Na przykład, tak - '[:-@]' - myślisz, że wybierasz dwukropek, myślnik i małpę, a w rzeczywistości otrzymujesz grupę symboli między : a @. W skład tej grupy wchodzą następujące znaki: ? < = > :

Skąd się wzięły? Z tabeli ASCII - dwukropek ma mniejszy numer niż małpa - i powstaje grupa. Czyli wszystkie grupy powstają według tabeli ASCII (w razie potrzeby można z tego korzystać).

Jak z tym walczyć: umieść symbol myślnika tam, gdzie na pewno nie zostanie odebrany jako symbol grupy, na przykład, na początku lub na końcu (czyli po [lub przed ]).

Można również wyescapować myślnik - wtedy będzie on oznaczał samego siebie niezależnie od pozycji. Na przykład, zamiast [:-@] napisać [:\-@] - i grupy już nie będzie, a będą trzy symbole - dwukropek, myślnik i małpa @.

Przykład

W następującym przykładzie wzorzec wyszukiwania jest taki: cyfra 1, następnie litera od 'a' do 'z', następnie cyfra 2:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)

print(res)

Wynik wykonania kodu:

python'! 1-2 ! !'

Przykład

Teraz wyescapujmy myślnik. W wyniku wzorzec wyszukiwania jest taki: cyfra 1, następnie litera 'a', lub myślnik, lub litera 'z', następnie cyfra 2:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! 1c2 !'

Przykład

Można po prostu przesunąć myślnik, nie escapując go:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! 1c2 !'

Przykład

W następującym przykładzie wzorzec wyszukiwania jest taki: pierwszy symbol - to małe litery lub myślnik '-', potem dwie litery 'x':

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)

print(res)

Wynik wykonania kodu:

python'! Axx ! @xx'

Przykład

W następującym przykładzie wzorzec wyszukiwania jest taki: pierwszy symbol - to małe, duże litery lub myślnik '-', potem dwie litery 'x':

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! ! @xx'

Przykład

Można umieścić myślnik między dwiema grupami - tam na pewno nie utworzy jeszcze jednej grupy:

pythontxt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)

print(res)

Wynik wykonania kodu:

python'! ! ! @xx'

Zadania praktyczne

Задание 1

Dany jest ciąg:

pythontxt = 'xaz xBz xcz x-z x@z'

Znajdź wszystkie ciągi według następującego wzorca: litera 'x', duża lub mała litera lub myślnik, litera 'z'.

Задание 2

Dany jest ciąg:

pythontxt = 'xaz x$z x-z xcz x+z x%z x*z'

Znajdź wszystkie ciągi według następującego wzorca: litera 'x', następnie lub dolar, lub myślnik lub plus, potem litera 'z'.