Python – Podstawianie wzorców w tekście za pomocą wyrażenia regularnego
Wyrażenie regularne (regex) służy do wyciągania potrzebnych informacji z dowolnego tekstu opartego na wzorcach. Są również szeroko stosowane do manipulowania tekstami opartymi na wzorcach, co prowadzi do wstępnego przetwarzania tekstu i są bardzo pomocne we wdrażaniu umiejętności cyfrowych, takich jak Przetwarzanie języka naturalnego (NLP) .
W tym artykule pokazano, jak używać wyrażeń regularnych do zastępowania wzorców, podając wiele przykładów, z których każdy stanowi odrębny scenariusz. Bardzo konieczne jest zrozumienie re.sub()> metoda re> (wyrażenie regularne) w celu zrozumienia podanych rozwiązań.
The re.sub()> Metoda wykonuje globalne wyszukiwanie i globalne zastępowanie podanego ciągu. Służy do zastąpienia określonego wzorca w ciągu znaków. W sumie istnieje 5 argumentów tej funkcji.
Składnia: re.sub(wzór, repl, ciąg, liczba=0, flagi=0)
Parametry:
wzór – wzór, który ma zostać przeszukany i zastąpiony
repl – ciąg znaków, którym ma zostać zastąpiony wzorzec
string – nazwa zmiennej, w której przechowywany jest wzorzec
liczba – liczba znaków, do której zostanie wykonane podstawienie
flagi – służy do modyfikowania znaczenia wzorca wyrażenia regularnego
count>Iflags>są argumentami opcjonalnymi.
Przykład 1: Podstawienie określonego wzorca tekstowego
W tym przykładzie dany wzorzec tekstowy zostanie przeszukany i zastąpiony w ciągu znaków. Chodzi o to, aby użyć bardzo normalnej formy re.sub()> metoda z tylko pierwszymi 3 argumentami.
Poniżej realizacja.
# Python implementation of substituting a> # specific text pattern in a string using regex> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > > # a string variable> > sentence1> => 'It is raining outside.'> > > # replacing text 'raining' in the string> > # variable sentence1 with 'sunny' thus> > # passing first parameter as raining> > # second as sunny, third as the> > # variable name in which string is stored> > # and printing the modified string> > print> (re.sub(r> 'raining'> ,> 'sunny'> , sentence1))> > > # a string variable> > sentence2> => 'Thank you very very much.'> > > # replacing text 'very' in the string> > # variable sentence2 with 'so' thus> > # passing parameters at their> > # appropriate positions and printing> > # the modified string> > print> (re.sub(r> 'very'> ,> 'so'> , sentence2))> > # Driver Code:> substitutor()> |
Wyjście:
It is sunny outside. Thank you so so much.
Niezależnie od tego, ile razy wymagany wzorzec występuje w ciągu znaków, metoda
re.sub()>funkcja zastępuje je wszystkie podanym wzorcem. Dlatego w powyższym przykładzie oba „bardzo” zostały zastąpione przez „tak”.
Przykład 2: Zastępowanie zestawu znaków określonym znakiem
Zadanie polega na zastąpieniu zestawu znaków danym znakiem. Zestaw znaków oznacza zakres znaków. w re.sub()> W metodzie [ ] (nawiasy kwadratowe) zapisywany jest zestaw znaków.
W tym przykładzie zestaw małych liter, tj. [a-z] zostanie zastąpiony cyfrą 0. Poniżej znajduje się implementacja.
# Python implementation of substituting> # a character set with a specific character> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > > # a string variable> > sentence> => '22 April is celebrated as Earth Day.'> > > # replacing every lower case characters> > # in the variable sentence with 0 and> > # printing the modified string> > print> (re.sub(r> '[a-z]'> ,> '0'> , sentence))> > # Driver Code:> substitutor()> |
Wyjście:
22 A0000 00 0000000000 00 E0000 D00.
Jeżeli zaistnieje potrzeba podstawienia zarówno zestawu znaków małych, jak i wielkich liter, wówczas zestaw wielkich liter należy wprowadzić w następujący sposób: [a-zA-Z] lub skuteczny można to zrobić za pomocą flag.
Przykład 3: Zastąpienie zestawu znaków określonym znakiem bez uwzględniania wielkości liter
W tym przykładzie zarówno małe, jak i wielkie litery zostaną zastąpione podanym znakiem. Przy użyciu flagi , zadanie to można wykonać bardzo łatwo.
The re.I> flaga oznacza re. ZIGNORUJ PRZYPADK . Wprowadzając tę flagę w re.sub()> metodę i podając dowolny zestaw znaków, tj. małe lub duże litery, zadanie można wykonać.
Poniżej realizacja.
# Python implementation of case-insensitive substitution> # of a character set with a specific character> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > > # a string variable> > sentence> => '22 April is celebrated as Earth Day.'> > > # replacing both lowercase and> > # uppercase characters with 0 in> > # the variable sentence by using> > # flag and printing the modified string> > print> (re.sub(r> '[a-z]'> ,> '0'> , sentence, flags> => re.I))> > # Driver Code:> substitutor()> |
Wyjście:
22 00000 00 0000000000 00 00000 000.
Przykład 4: Wykonaj podstawienie do określonej liczby znaków
W tym przykładzie podstawienie będzie dotyczyło określonej liczby znaków, a nie całego ciągu. Aby wykonać tego typu podstawienie, re.sub()> metoda ma argument count> .
Podając wartość liczbową do tego argumentu, można kontrolować liczbę znaków, na których nastąpi podstawienie. Poniżej realizacja.
# Python implementation to perform substitution> # up to a certain number of characters> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > > # a string variable> > sentence> => 'Follow your Passion.'> > > # case-insensitive substitution> > # on variable sentence upto> > # eight characters and printing> > # the modified string> > print> (re.sub(r> '[a-z]'> ,> '0'> , sentence,> 8> , flags> => re.I))> > # Driver Code:> substitutor()> |
Wyjście:
000000 00ur Passion.
Przykład 5: Podstawienie za pomocą skróconej klasy znaków i wstępne przetwarzanie tekstu
Moduł Regex udostępnia wiele skróconych klas znaków dla tych zestawów znaków, które są bardzo powszechne podczas wstępnego przetwarzania tekstu. Użycie skróconej klasy znaków skutkuje pisaniem wydajnego kodu i zmniejsza potrzebę zapamiętywania zakresu każdego zestawu znaków.
Aby uzyskać szczegółowe wyjaśnienie klasy znaków skróconych i sposobu pisania wyrażeń regularnych w Pythonie w celu wstępnego przetwarzania tekstu, kliknij Tutaj . Poniżej znajdują się niektóre z powszechnie używanych klas znaków skróconych:
w: dopasowuje znaki alfanumeryczne
W: dopasowuje znaki inne niż alfanumeryczne, takie jak @, #, ', +,%, –
d: dopasowuje znaki cyfr
s: dopasowuje białe znakiZnaczenie niektórych składni:
dodanie symbolu plus(+) po klasie lub zestawie znaków: powtórzenie poprzedzającej klasy znaków lub zestawu co najmniej 1 lub więcej razy.dodanie symbolu gwiazdki (*) po klasie lub zestawie znaków: powtórzenie poprzedzającej klasy znaków lub zestawu co najmniej 0 lub więcej razy.
dodanie symbolu daszka (^) przed klasą lub zestawem znaków: pasująca pozycja jest określana dla tej klasy znaków lub ustawiana na początku łańcucha.
dodanie symbolu dolara ($) po klasie lub zestawie znaków: pasująca pozycja jest określana dla tej klasy znaków lub ustawiana na końcu łańcucha.
Ten przykład demonstruje użycie wspomnianych skróconych klas znaków do podstawienia i wstępnego przetwarzania tekstu w celu uzyskania czystych i wolnych od błędów ciągów znaków. Poniżej realizacja.
# Python implementation of Substitution using> # shorthand character class and preprocessing of text> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > > # list of strings> > S> => [> '2020 Olympic games have @# been cancelled'> ,> > 'Dr Vikram Sarabhai was +%--the ISRO’s first chairman'> ,> > 'Dr Abdul Kalam, the father of India's missile programme'> ]> > > # loop to iterate every element of list> > for> i> in> range> (> len> (S)):> > > # replacing every non-word character with a white space> > S[i]> => re.sub(r> 'W'> ,> ' '> , S[i])> > > # replacing every digit character with a white space> > S[i]> => re.sub(r> 'd'> ,> ' '> , S[i])> > > # replacing one or more white space with a single white space> > S[i]> => re.sub(r> 's+'> ,> ' '> , S[i])> > > # replacing alphabetic characters which have one or more> > # white space before and after them with a white space> > S[i]> => re.sub(r> 's+[a-z]s+'> ,> ' '> , S[i], flags> => re.I)> > > # substituting one or more white space which is at> > # beginning of the string with an empty string> > S[i]> => re.sub(r> '^s+'> , '', S[i])> > > # substituting one or more white space which is at> > # end of the string with an empty string> > S[i]> => re.sub(r> 's+$'> , '', S[i])> > > # loop to iterate every element of list> > for> i> in> range> (> len> (S)):> > > # printing each modified string> > print> (S[i])> > # Driver Code:> substitutor()> |
Wyjście:
Olympic games have been cancelled Dr Vikram Sarabhai was the ISRO first chairman Dr Abdul Kalam the father of India missile programme