Tutorial Python RegEx (espressioni regolari) con esempi

Blog

Tutorial Python RegEx (espressioni regolari) con esempi

Espressioni regolari in Python | Imposta 1

Il modulo Regular Expressions (RE) specifica un insieme di stringhe (schema) che lo corrisponde.
Per comprendere l'analogia RE, i MetaCaratteri sono utili, importanti e verranno utilizzati nelle funzioni del modulo re.
Ci sono un totale di 14 metacaratteri e saranno discussi come seguono nelle funzioni:



Used to drop the special meaning of character following it (discussed below) [] Represent a character class ^ Matches the beginning $ Matches the end . Matches any character except newline ? Matches zero or one occurrence. | Means OR (Matches with any of the characters separated by it. * Any number of occurrences (including 0 occurrences) + One or more occurrences {} Indicate number of occurrences of a preceding RE to match. () Enclose a group of REs
  • funzione compila()
    Le espressioni regolari sono compilate in oggetti modello, che hanno metodi per varie operazioni come la ricerca di corrispondenze di modelli o l'esecuzione di sostituzioni di stringhe.
# Module Regular Expression is imported using __import__(). import re # compile() creates regular expression character class [a-e], # which is equivalent to [abcde]. # class [abcde] will match with string with 'a', 'b', 'c', 'd', 'e'. p = re.compile('[a-e]') # findall() searches for the Regular Expression and return a list upon finding print(p.findall('Aye, said Mr. Gibenson Stark'))

Produzione:

['e', 'a', 'd', 'b', 'e', 'a']

Comprensione dell'output:
La prima occorrenza è 'e' in Aye e non 'A', poiché fa distinzione tra maiuscole e minuscole.
La prossima occorrenza è 'a' in said, quindi 'd' in said, seguita da 'b' ed 'e' in Gibenson, l'ultima 'a' corrisponde a Stark.



La barra rovesciata del metacarattere '' ha un ruolo molto importante in quanto segnala varie sequenze. Se la barra rovesciata deve essere utilizzata senza il suo significato speciale come metacarattere, utilizzare ''

d Matches any decimal digit, this is equivalent to the set class [0-9]. D Matches any non-digit character. s Matches any whitespace character. S Matches any non-whitespace character w Matches any alphanumeric character, this is equivalent to the class [a-zA-Z0-9_]. W Matches any non-alphanumeric character.

Set class [s,.] corrisponderà a qualsiasi carattere di spazio bianco, ',' o,'.' .



import re # d is equivalent to [0-9]. p = re.compile('d') print(p.findall('I went to him at 11 A.M. on 4th July 1886')) # d+ will match a group on [0-9], group of one or greater size p = re.compile('d+') print(p.findall('I went to him at 11 A.M. on 4th July 1886'))

Produzione:

['1', '1', '4', '1', '8', '8', '6'] ['11', '4', '1886'] import re # w is equivalent to [a-zA-Z0-9_]. p = re.compile('w') print(p.findall('He said * in some_lang.')) # w+ matches to group of alphanumeric character. p = re.compile('w+') print(p.findall('I went to him at 11 A.M., he said *** in some_language.')) # W matches to non alphanumeric characters. p = re.compile('W') print(p.findall('he said *** in some_language.'))

Produzione:

['1', '1', '4', '1', '8', '8', '6'] ['11', '4', '1886'] import re # w is equivalent to [a-zA-Z0-9_]. p = re.compile('w') print(p.findall('He said * in some_lang.')) # w+ matches to group of alphanumeric character. p = re.compile('w+') print(p.findall('I went to him at 11 A.M., he said *** in some_language.')) # W matches to non alphanumeric characters. p = re.compile('W') print(p.findall('he said *** in some_language.'))

Produzione:

array di ordinamento javascript per chiave
['H', 'e', 's', 'a', 'i', 'd', 'i', 'n', 's', 'o', 'm', 'e', '_', 'l', 'a', 'n', 'g'] ['I', 'went', 'to', 'him', 'at', '11', 'A', 'M', 'he', 'said', 'in', 'some_language'] [' ', ' ', '*', '*', '*', ' ', ' ', '.'] import re # '*' replaces the no. of occurrence of a character. p = re.compile('ab*') print(p.findall('ababbaabbb'))

Produzione:

['ab', 'abb', 'a', 'abbb']

Comprensione dell'output:
Il nostro RE è ab*, che 'a' accompagnato da qualsiasi no. di 'b', a partire da 0.
L'output 'ab' è valido a causa della singola 'a' accompagnata da una singola 'b'.
L'output 'abb', è valido a causa della singola 'a' accompagnata da 2 'b'.
L'output 'a' è valido a causa della singola 'a' accompagnata da 0 'b'.
L'output 'abbb', è valido a causa della singola 'a' accompagnata da 3 'b'.

  • Funzione divisa()
    Dividi la stringa per le occorrenze di un carattere o di un modello, una volta trovato quel modello, i caratteri rimanenti della stringa vengono restituiti come parte dell'elenco risultante.

Sintassi:

re.split(pattern, string, maxsplit=0, flags=0)

Il primo parametro, pattern denota l'espressione regolare, string è la stringa data in cui verrà cercato il pattern e in cui si verifica la suddivisione, maxsplit se non fornito è considerato zero '0' e se viene fornito un valore diverso da zero, allora al massimo che si verificano molte divisioni. Se maxsplit = 1, la stringa verrà divisa una sola volta, risultando in un elenco di lunghezza 2. I flag sono molto utili e possono aiutare ad abbreviare il codice, non sono parametri necessari, ad esempio: flags = re.IGNORECASE, In questa suddivisione , il caso verrà ignorato.

from re import split # 'W+' denotes Non-Alphanumeric Characters or group of characters # Upon finding ',' or whitespace ' ', the split(), splits the string from that point print(split('W+', 'Words, words , Words')) print(split('W+', 'Word's words Words')) # Here ':', ' ' ,',' are not AlphaNumeric thus, the point where splitting occurs print(split('W+', 'On 12th Jan 2016, at 11:02 AM')) # 'd+' denotes Numeric Characters or group of characters # Splitting occurs at '12', '2016', '11', '02' only print(split('d+', 'On 12th Jan 2016, at 11:02 AM'))

Produzione:

['Words', 'words', 'Words'] ['Word', 's', 'words', 'Words'] ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM'] ['On ', 'th Jan ', ', at ', ':', ' AM'] import re # Splitting will occurs only once, at '12', returned list will have length 2 print(re.split('d+', 'On 12th Jan 2016, at 11:02 AM', 1)) # 'Boy' and 'boy' will be treated same when flags = re.IGNORECASE print(re.split('[a-f]+', 'Aey, Boy oh boy, come here', flags = re.IGNORECASE)) print(re.split('[a-f]+', 'Aey, Boy oh boy, come here'))

Produzione:

['On ', 'th Jan 2016, at 11:02 AM'] ['', 'y, ', 'oy oh ', 'oy, ', 'om', ' h', 'r', ''] ['A', 'y, Boy oh ', 'oy, ', 'om', ' h', 'r', '']
  • Funzione sub()
    Sintassi:
re.sub(pattern, repl, string, count=0, flags=0)

Il 'sub' nella funzione sta per SubString, un determinato modello di espressione regolare viene cercato nella stringa data (3° parametro) e dopo aver trovato il modello di sottostringa viene sostituito da repl (2° parametro), count controlla e mantiene il numero di volte questo si verifica.

import re # Regular Expression pattern 'ub' matches the string at 'Subject' and 'Uber'. # As the CASE has been ignored, using Flag, 'ub' should match twice with the string # Upon matching, 'ub' is replaced by '~*' in 'Subject', and in 'Uber', 'Ub' is replaced. print(re.sub('ub', '~*' , 'Subject has Uber booked already', flags = re.IGNORECASE)) # Consider the Case Sensitivity, 'Ub' in 'Uber', will not be reaplced. print(re.sub('ub', '~*' , 'Subject has Uber booked already')) # As count has been given value 1, the maximum times replacement occurs is 1 print(re.sub('ub', '~*' , 'Subject has Uber booked already', count=1, flags = re.IGNORECASE)) # 'r' before the patter denotes RE, s is for start and end of a String. print(re.sub(r'sANDs', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE))

Produzione

S~*ject has ~*er booked already S~*ject has Uber booked already S~*ject has Uber booked already Baked Beans & Spam
  • Funzione subn()
    Sintassi:
re.subn(pattern, repl, string, count=0, flags=0)

subn() è simile a sub() in tutti i modi, tranne nel modo in cui fornisce l'output. Restituisce una tupla con il conteggio del totale delle sostituzioni e la nuova stringa anziché solo la stringa.

import re print(re.subn('ub', '~*' , 'Subject has Uber booked already')) t = re.subn('ub', '~*' , 'Subject has Uber booked already', flags = re.IGNORECASE) print(t) print(len(t)) # This will give same output as sub() would have print(t[0])

Produzione

('S~*ject has Uber booked already', 1) ('S~*ject has ~*er booked already', 2) Length of Tuple is: 2 S~*ject has ~*er booked already
  • Funzione escape()
    Sintassi:
re.escape(string)

Stringa di ritorno con tutti i caratteri non alfanumerici barrati all'indietro, questo è utile se si desidera abbinare una stringa letterale arbitraria che potrebbe contenere metacaratteri di espressioni regolari.

import re # escape() returns a string with BackSlash '', before every Non-Alphanumeric Character # In 1st case only ' ', is not alphanumeric # In 2nd case, ' ', caret '^', '-', '[]', '' are not alphanumeric print(re.escape('This is Awseome even 1 AM')) print(re.escape('I Asked what is this [a-9], he said ^WoW'))

Produzione

This is Awseome even 1 AM I Asked what is this [a-9], he said ^WoW

Espressioni regolari in Python | Set 2 (Cerca, Abbina e Trova tutto)

Il modulo Rif fornisce supporto per le espressioni regolari in Python. Di seguito sono riportati i metodi principali di questo modulo.

Ricerca di un'occorrenza di pattern

reddit nba streaming live

ricerca (): Questo metodo restituisce None (se il modello non corrisponde) o un re.MatchObject che contiene informazioni sulla parte corrispondente della stringa. Questo metodo si interrompe dopo la prima corrispondenza, quindi è più adatto per testare un'espressione regolare più che estrarre dati.

# A Python program to demonstrate working of re.match(). import re # Lets use a regular expression to match a date string # in the form of Month name followed by day number regex = r'([a-zA-Z]+) (d+)' match = re.search(regex, 'I was born on June 24') if match != None: # We reach here when the expression '([a-zA-Z]+) (d+)' # matches the date string. # This will print [14, 21), since it matches at index 14 # and ends at 21. print 'Match at index %s, %s' % (match.start(), match.end()) # We us group() method to get all the matches and # captured groups. The groups contain the matched values. # In particular: # match.group(0) always returns the fully matched string # match.group(1) match.group(2), ... return the capture # groups in order from left to right in the input string # match.group() is equivalent to match.group(0) # So this will print 'June 24' print 'Full match: %s' % (match.group(0)) # So this will print 'June' print 'Month: %s' % (match.group(1)) # So this will print '24' print 'Day: %s' % (match.group(2)) else: print 'The regex pattern does not match.'

Produzione :

Match at index 14, 21 Full match: June 24 Month: June Day: 24

Abbinare un motivo al testo

re.match() : Questa funzione tenta di far corrispondere il modello all'intera stringa. La funzione re.match restituisce un oggetto match in caso di successo, None in caso di fallimento.

re.match(pattern, string, flags=0) pattern : Regular expression to be matched. string : String where p attern is searched flags : We can specify different flags using bitwise OR (|). # A Python program to demonstrate working # of re.match(). import re # a sample function that uses regular expressions # to find month and day of a date. def findMonthAndDate(string): regex = r'([a-zA-Z]+) (d+)' match = re.match(regex, string) if match == None: print 'Not a valid date' return print 'Given Data: %s' % (match.group()) print 'Month: %s' % (match.group(1)) print 'Day: %s' % (match.group(2)) # Driver Code findMonthAndDate('Jun 24') print('') findMonthAndDate('I was born on June 24')

Trovare tutte le occorrenze di un pattern

re.findall() : Restituisce tutte le corrispondenze non sovrapposte di pattern in string, come un elenco di stringhe. La stringa viene scansionata da sinistra a destra e le corrispondenze vengono restituite nell'ordine trovato (Fonte: Documenti Python ).

# A Python program to demonstrate working of # findall() import re # A sample text string where regular expression # is searched. string = '''Hello my Number is 123456789 and my friend's number is 987654321''' # A sample regular expression to find digits. regex = 'd+' match = re.findall(regex, string) print(match) # This example is contributed by Ayush Saluja.

Produzione :

['123456789', '987654321']

L'espressione regolare è un argomento vasto. È una libreria completa. Le espressioni regolari possono fare molte cose. Puoi abbinare, cercare, sostituire, estrarre molti dati. Ad esempio, sotto il piccolo codice è così potente che può estrarre l'indirizzo e-mail da un testo. Quindi possiamo creare i nostri Web Crawler e scrapper in Python con easy.Guarda sotto regex.

# extract all email addresses and add them into the resulting set new_emails = set(re.findall(r'[a-z0-9.-+_]+@[a-z0-9.-+_]+.[a-z]+', text, re.I))

Discuteremo presto altri metodi sulle espressioni regolari.

Per favore scrivi commenti se trovi qualcosa di sbagliato, o vuoi condividere più informazioni sull'argomento discusso sopra

www norton.com/setup

#python #webdev #machinelearning #datascience