⊗pyPmREESCh 36 of 129 menu

Ekranowanie znaków specjalnych w wyrażeniach regularnych Pythona

Załóżmy, że trzeba sprawić, aby znak specjalny oznaczał sam siebie. W tym celu należy go wyekranować za pomocą ukośnika odwrotnego. Spójrzmy na przykładach.

Przykład

W następnym przykładzie autor wyrażenia regularnego chciał, aby wzorzec wyszukiwania wyglądał tak: litera 'a', następnie plus '+', następnie litera 'x'. Jednakże, autor kodu nie wyekranował symbolu '+' i dlatego wzorzec wyszukiwania w rzeczywistości wygląda tak: litera 'a' jeden lub więcej razy, potem litera 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Wynik wykonania kodu:

'a+x ! ! !'

Przykład

A teraz autor wyekranował plus ukośnikiem odwrotnym. Teraz wzorzec wyszukiwania wygląda tak, jak trzeba: litera 'a', następnie plus '+', następnie litera 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Wynik wykonania kodu:

'! ax aax aaax'

Przykład

W tym przykładzie wzorzec wygląda tak: litera 'a', następnie kropka '.', następnie litera 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Wynik wykonania kodu:

'! abx azx'

Przykład

W następnym przykładzie autor zapomniał wyekranować ukośnik i pod wyrażenie regularne trafiły wszystkie podciągi, ponieważ niewyekranowana kropka oznacza dowolny znak:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Wynik wykonania kodu:

'! ! !'

Uwaga

Zwróć uwagę na to, że jeśli zapomnisz ukośnika odwrotnego dla kropki (kiedy powinna oznaczać samą siebie) - tego można nawet nie zauważyć:

res = re.sub('a.x', '!', 'a.x') print(res) # zwróci '!', tak jak chcieliśmy

Wizualnie działa poprawnie (ponieważ kropka oznacza dowolny znak, w tym również zwykłą kropkę '.'). Ale jeśli zmienimy ciąg, w którym odbywają się zamiany - zobaczymy nasz błąd:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # zwróci '! ! !', a oczekiwano '! abx azx'

Lista znaków specjalnych i zwykłych

Jeśli wyekranujemy zwykły znak - nic strasznego się nie stanie - i tak będzie on oznaczał sam siebie. Wyjątek - cyfry, ich nie można ekranować.

Często pojawia się wątpliwość, czy dany symbol jest specjalny. Niektórzy dochodzą do tego, że ekranują wszystkie podejrzane znaki jeden po drugim. Jednakże, jest to zła praktyka (zanieczyszcza wyrażenie regularne ukośnikami odwrotnymi).

Są znakami specjalnymi: $ ^ . * + ? \ / {} [] () |

Nie są znakami specjalnymi: @ : , ' " - _ = < > % # ~ `& !

Zadania praktyczne

Dany jest ciąg:

txt = 'a.a aba aea'

Napisz wyrażenie regularne, które znajdzie ciąg 'a.a', nie chwytając pozostałych.

Dany jest ciąg:

txt = '2+3 223 2223'

Napisz wyrażenie regularne, które znajdzie ciąg '2+3', nie chwytając pozostałych.

Dany jest ciąg:

txt = '23 2+3 2++3 2+++3 345 567'

Napisz wyrażenie regularne, które znajdzie ciągi '2+3', '2++3', '2+++3', nie chwytając pozostałych (+ może być dowolna ilość).

Dany jest ciąg:

txt = '23 2+3 2++3 2+++3 445 677'

Napisz wyrażenie regularne, które znajdzie ciągi '23', '2+3', '2++3', '2+++3', nie chwytając pozostałych.

Dany jest ciąg:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Napisz wyrażenie regularne, które znajdzie ciągi '*q+', '*qq+', '*qqq+', nie chwytając pozostałych.

Dany jest ciąg:

txt = '[abc] {abc} abc (abc) [abc]'

Napisz wyrażenie regularne, które znajdzie ciągi w nawiasach kwadratowych i zamieni je na '!'.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć