Sunteți pe pagina 1din 27

Expresii regulate

Python
re.findall('[a-z]+', text.lower())
În informatică, o expresie regulată, denumită
pe scurt regex sau regexp (din engleză de la
regular expression), reprezintă un șablon
care descrie un limbaj regulat, adică o
mulțime de șiruri de caractere generată de o
gramatică regulată.

Mulțimea de fișiere textuale

.*\.txt

Athanasiu, Irina; Raiciu, Diana; Sion, Radu; Mocanu, Irina (2002). Limbaje formale și automate. București: Matrix Rom
Cu ajutorul expresiilor regulate se poate de găsit
sau înlocuit anumite părţi dintr-un text. Sunt o
metodă puternică de verificare a adreselor de e-
mail, domenii de internet sau coduri poştale. Un e-
mail valid trebuie să se muleze pe
un model prestabilit. 

Mulțimea de email adrese

[a-zA-Z0-9]+@[a-z]+(\.[a-z]+)*\.([a-z]{2,})

Athanasiu, Irina; Raiciu, Diana; Sion, Radu; Mocanu, Irina (2002). Limbaje formale și automate. București: Matrix Rom
Shell-ul Unix
Următoarele construcţii în shell sunt pe post de expresii regulate:
• Orice caracter este o expresie regulată; excepţii sunt semnele de
mai jos.
• Semnul ? ţine locul unui singur caracter, oricare ar fi el. Pentru a
scrie chiar caracterul semn de întrebare trebuie să scriem \?
• Pentru a scrie semnul \ trebuie să scriem \\
• Semnul de concatenare este omis. Aşa cum în matematică
cîteodată omitem semnul de înmulţire, în shell nu scriem. Astfel,
şirul a???b reprezintă toate cuvintele de cinci litere care încep cu a
şi se termină cu b.
• Semnul * nu mai e un operator care se aplică unei expresii; el
înseamnă un şir oarecare de zero sau mai multe caractere. Astfel,
cînd scriem a*b asta înseamnă: toate şirurile care încep cu a şi se
termină cu b.
• Alternanţa se reprezintă în felul următor:  {R,S,T}. Astfel,
expresia {a,b}{c,d} reprezintă patru şiruri: ac, bc, ad, bd.

Mihai Budiu, Expresii Regulatehttp://www.cs.cmu.edu/~mihaib/articles/regex/regex-html.html


Shell-ul Unix

Exemple:

ls .??*  afişează (comanda ls) toate


fişierele al căror nume începe cu semnul
punct şi are cel puţin trei caractere
rm *a*b* şterge toate fişierele care au un a
şi un b în nume, în ordinea asta

Mihai Budiu, Expresii Regulatehttp://www.cs.cmu.edu/~mihaib/articles/regex/regex-html.html


Shell-ul Unix
grep - Get Regular Expression Patterns
Semnul . (punct) ţine locul oricărui caracter.
Exemplu: a.b înseamnă orice cuvînt de trei litere care începe cu a şi se termină cu
b.
Parantezele se scriu astfel: \( şi \), şi se pot folosi pentru a schimba ordinea de
aplicare a operaţiilor.
Semnul de alternanţă este \|, ex. \(a\|b\)c reprezintă cuvintele ac şi bc.
Caracterele speciale se prefixează cu \ pentru a fi exprimate; de
exemplu, \* reprezintă chiar o steluţă.
 [a-f] indica toate caracterele între a şi f, inclusiv: a,b,c,d,e,f.
 [^a-f]  - toate caracterele care nu sunt între a şi f.
 [acfz]  - unul dintre caracterele a, c, f sau z.
Semnul ^ este începutul de linie.
Semnul $ este sfîrşitul de linie.
Semnul \? se aplică ca steluţa, după o expresie, şi înseamnă: expresia anterioară
de zero sau una ori.
De exemplu, expresia ab\(c\?\) reprezintă cuvintele ab şi abc.
Expresia R repetată de două, trei sau patru ori, astfel: R\{2,4\}. De exemplu,
expresia \(ab\)\{1,3\} descrie cuvintele ab, abab şi ababab.

Mihai Budiu, Expresii Regulatehttp://www.cs.cmu.edu/~mihaib/articles/regex/regex-html.html


Shell-ul Unix
grep - Get Regular Expression Patterns

Exemple:

Mihai Budiu, Expresii Regulatehttp://www.cs.cmu.edu/~mihaib/articles/regex/regex-html.html


Perl
Expr O mulţime de caractere (ca
Semnificaţie []
esie la grep)
Următorul meta-caracter Operatorul star: R* = R de zero
\ R+ = 
*
devine un caracter obişnuit sau mai multe ori la rînd
^ Început de linie + R+ = RR* (R cel puţin o dată)
Orice caracter în afară de ?  (R de zero sau una ori)
.
newline
{n} R{n} = R exact de n ori
$ Sfîrşit de linie
{n,} R{n,} = R de cel puţin n ori
| Alternanţă
{n,m R{n,m} = R de cel puţin n dar
() Indică precedenţa operaţiilor } cel mult m ori la rînd
\t Caracterul tab
\n Caracterul sfîrşit de linie

Athanasiu, Irina; Raiciu, Diana; Sion, Radu; Mocanu, Irina (2002). Limbaje formale și automate. București: Matrix Rom
Perl
expression matches...
abc abc (that exact character sequence, but anywhere in the string)
^abc abc at the beginning of the string
abc$ abc at the end of the string
a|b either of a and b
^abc|abc$ the string abc at the beginning or at the end of the string
ab{2,4}c an a followed by two, three or four b’s followed by a c
ab{2,}c an a followed by at least two b’s followed by a c
an a followed by any number (zero or more) of b’s followed by
ab*c
a c
ab+c an a followed by one or more b’s followed by a c
an a followed by an optional b followed by a c; that is,
ab?c
either abc or ac
Perl
expression matches...
abc abc (that exact character sequence, but anywhere in the string)
^abc abc at the beginning of the string
abc$ abc at the end of the string
a|b either of a and b
^abc|abc$ the string abc at the beginning or at the end of the string
ab{2,4}c an a followed by two, three or four b’s followed by a c
ab{2,}c an a followed by at least two b’s followed by a c
an a followed by any number (zero or more) of b’s followed by
ab*c
a c
ab+c an a followed by one or more b’s followed by a c
an a followed by an optional b followed by a c; that is,
ab?c
either abc or ac
Python

Expresiile regulate (modulul re ) sunt folosite


pentru a căuta eficient șiruri de caractere într-un
text. 
(https://docs.python.org/2/library/re.html)

>>> import re
>>> print re.match(r"GR(.)?S", "GRIS")

<_sre.SRE_Match at 0x7f37acd2c558>
Python

Căutarea

>>> import re
>>> m = re.search(r"Bienvenue chez (?
P<chezqui>\w+) ! Tu as (?P<age>\d+) ans ?",
"Bienvenue chez olivier ! Tu as 32 ans")
>>> if m is not None:
... print m.group('chezqui')
... print m.group('age')
http://apprendre-python.com/page-expressions-regulieres-regular-python
Python

>>> import re
>>> m = re.search(r"Bienvenue chez (?P<chezqui>\w+) ! Tu as
(?P<age>\d+) ans ?", "Bienvenue chez olivier ! Tu as 32
ans")
>>> if m is not None:
... print m.group('chezqui')
... print m.group('age')

...
olivier
32
Python

Înlocuirea

>>> print re.sub(r"Bienvenue chez (?


P<chezqui>\w+) ! Tu as (?P<age>\d+) ans ?",
r"\g<chezqui> a \g<age> ans", "Bienvenue chez
olivier ! Tu as 32 ans")

olivier a 32 ans
Python

Caută toate

>>> import re
>>> re.findall("([0-9]+)", "Bonjour 111
Aurevoir 222")
Python

>>> import re
>>> re.findall("([0-9]+)", "Bonjour 111
Aurevoir 222")

['111', '222']
Python

>>> import re
>>> text = "ana are 2 mere, primește 5,
cumpără 10 și în final are 17."
>>> re.findall(r"\d+", text)
1
Exemple:
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
18
19
1 Mulează
2 Mulează
3 Mulează
4 Nu mulează
5 Mulează
6 Mulează
7 Mulează
8 Mulează
9 Nu mulează
10
Mulează
11 Mulează
12 Mulează
13 Nu mulează
14 Mulează
15 Mulează
16 Mulează
17 Mulează
18 Mulează
19 Nu mulează
Email valid
>>> mails = ["olivier@mailbidon.com",
"olivier@mailbidon.ca", "8@mailbidon.com",
"@mailbidon.com", "olivier@mailbidon"]

>>> regex = re.compile(r"^[a-z0-9._-]+@[a-z0-9._-]


+\.[(com|fr)]+"
>>> for mail in mails:
... if regex.match(mail) is not None:
... print "Ce mail : %s est valide" % mail
... else:
... print "Erreur ce mail : %s est non
valide" % mail
Email valid
>>> mails = ["olivier@mailbidon.com", "olivier@mailbidon.ca",
"8@mailbidon.com", "@mailbidon.com", "olivier@mailbidon"]

>>> regex = re.compile(r"^[a-z0-9._-]+@[a-z0-9._-]+\.[(com|fr)]+"


>>> for mail in mails:
... if regex.match(mail) is not None:
... print "Ce mail : %s est valide" % mail
... else:
... print "Erreur ce mail : %s est non valide" % mail

Ce mail : olivier@mailbidon.com est valide


Erreur ce mail : olivier@mailbidon.ca est non valide
Ce mail : 8@mailbidon.com est valide
Erreur ce mail : @mailbidon.com est non valide
Erreur ce mail : olivier@mailbidon est non valide
Verificarea
http://pythex.org/ http://regexr.com/
Exemple
Catwoman
Batman
The Tick
Spider Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter
Exemple
Catwoman
Batman
re.findall('man', text.lower())
The Tick
Spider Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter
Exemple
Catwoman
Batman
re.findall('a.a', text)
The Tick
Spider Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter
Exemple
Catwoman
Batman
re.findall(‘[A-Z][a-z]+\s[A-Z][a-z]+', text)
The Tick
Spider Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter
Exemple
Catwoman
Batman
re.findall(‘[A-Z][a-z]+(\s[A-Z][a-z]+)?', text)
The Tick
Spider Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter