Ji bo ku di Python de pêvajoyek birêkûpêk pêk bînin, em modula re ji pirtûkxaneya standard bikar tînin. Ew dihêle hûn bi karanîna şêwazên vegotina birêkûpêk rêzan derxin, biguhezînin û parçe bikin.
- re — Regular expression operations — Python 3.10.0 Documentation
- Regular Expression HOWTO — Python 3.10.0 Documentation
Di vê beşê de, em ê pêşî fonksiyon û rêbazên modula re rave bikin.
- Berhevkirina qalibên îfadeya birêkûpêk:
compile()
- object match
- Kontrol bikin ka destpêka rêzê li hev tê, derxin:
match()
- Ji bo maçên ku bi destpêkê ve sînorkirî ne kontrol bikin:
search()
- Kontrol bikin ka tevahiya rêzê li hev dike:
fullmatch()
- Lîsteya hemî beşên lihevhatî bistînin:
findall()
- Hemî beşên lihevhatî wekî dubareker bistînin:
finditer()
- Parçeya lihevhatî biguherînin:
sub()
,subn()
- Parçekirina rêzan bi şêweyên vegotina rêkûpêk:
split()
Piştî wê, ez ê tîpên meta (karekterên taybetî) û rêzikên taybetî yên birêkûpêk ên ku dikarin di modula re de werin bikar anîn rave bikim. Di bingeh de, ew hevoksaziya birêkûpêk a standard e, lê ji danîna alayan haydar bin (bi taybetî re.ASCII).
- Metakarakterên birêkûpêk, rêzikên taybetî, û hişyariyên li Python
- Sazkirina alê
- Bi tîpên ASCII ve girêdayî ye:
re.ASCII
- Ne hesas bi dozê ye:
re.IGNORECASE
- Destpêk û dawiya her rêzê li hev bikin:
re.MULTILINE
- Gelek alayan diyar bikin
- Bi tîpên ASCII ve girêdayî ye:
- Lihevhatinên çavbirçî û bêxew
- Nimûneya vegotina birêkûpêk berhev bikin: berhevkirin()
- object match
- Kontrol bikin ka destpêka rêzekê li hev dike, derxînin: match()
- Ji bo maçên ku bi destpêkê ve sînorkirî ne kontrol bikin, derxînin: lêgerîn()
- Kontrol bikin ka tevahiya rêzê li hev dike: fullmatch()
- Lîsteya hemî beşên lihevhatî bistînin: findall()
- Hemî beşên lihevhatî wekî dubareker bistînin: finditer()
- Parçeyên lihevhatî biguherînin: sub(), subn()
- Parçekirina rêzan bi şêweyên vegotina rêkûpêk: split()
- Metakarakterên birêkûpêk, rêzikên taybetî, û hişyariyên li Python
- Sazkirina alê
- Lihevhatinên çavbirçî û bêxew
Nimûneya vegotina birêkûpêk berhev bikin: berhevkirin()
Du away hene ku meriv pêvajoyek birêkûpêk di modula re de pêk bîne.
Bi fonksiyonê bixebitin
Ya yekem fonksiyonek e.re.match()
,re.sub()
Fonksiyonên mîna van hene ku bi karanîna şêwazên birêkûpêk birêkûpêk têne derxistin, veguheztin û pêvajoyên din pêk bînin.
Dê hûrguliyên fonksîyonan paşê werin vegotin, lê di hemî wan de, argumana yekem rêzika şêwaza birêkûpêk a birêkûpêk e, li dûv rêza ku were pêvajo kirin û hwd. Mînakî, di re.sub() de ku veguheztinê pêk tîne, argumana duyemîn rêzika veguheztinê ye, û argûmana sêyem jî rêzika ku tê hilanîn e.
import re
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
m = re.match(r'([a-z]+)@([a-z]+)\.com', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
result = re.sub(r'([a-z]+)@([a-z]+)\.com', 'new-address', s)
print(result)
# new-address, new-address, ccc@zzz.net
Bala xwe bidinê ku [a-z] di nimûneya birêkûpêk a vê nimûneyê de tê wateya her karakterek ji a-yê heya z (ango alfabeya piçûk), û + tê wateya dubarekirina nimûneya berê (di vê rewşê de [a-z]) yek an jî çend caran. [a-z]+ bi her rêzika ku yek an jî çend tîpên alfabîkî yên piçûk dubare dike li hev dike.
. karekterek meta ye (karekterek xwedî wateyek taybetî) û divê bi paşverû jê were xilas kirin.
Ji ber ku rêzikên nimûneyên birêkûpêk bi gelemperî gelek paşkêşan bikar tînin, karanîna rêzikên xav wekî mînakê hêsan e.
Di rêbazek birêkûpêk nimûneya vegotina birêkûpêk de dimeşe
Awayê duyemîn ku meriv îfadeyên birêkûpêk di modula re de pêvajoy dike, rêbaza objeya nimûneya vegotina birêkûpêk e.
Bi karanîna re.compile(), hûn dikarin xêzek nimûneya vegotina birêkûpêk berhev bikin da ku objektek nimûneya vegotina birêkûpêk biafirînin.
p = re.compile(r'([a-z]+)@([a-z]+)\.com')
print(p)
# re.compile('([a-z]+)@([a-z]+)\\.com')
print(type(p))
# <class 're.Pattern'>
re.match()
,re.sub()
Mînakî, heman pêvajo wekî van fonksiyonan dikare wekî rêbazên lihevhatî (), sub() yên tiştên birêkûpêk were darve kirin.
m = p.match(s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
result = p.sub('new-address', s)
print(result)
# new-address, new-address, ccc@zzz.net
Hemî fonksiyonên re.xxx() yên ku li jêr têne diyar kirin jî wekî rêbazên vebêja birêkûpêk têne peyda kirin.
Ger hûn pêvajoyek ku heman şêwazê bikar tîne dubare dikin, jêhatîtir e ku hûn bi re.compile() hêmanek birêkûpêk biafirînin û wê li dora xwe bikar bînin.
Di koda nimûneya jêrîn de, fonksiyon bêyî berhevkirinê ji bo rehetiyê tê bikar anîn, lê heke hûn dixwazin heman şêweyê dubare bi kar bînin, tê pêşniyar kirin ku ew di pêş de berhev bikin û wekî rêbazek tiştek birêkûpêk binav bikin.
object match
match (), lêgerîn (), hwd.
s = 'aaa@xxx.com'
m = re.match(r'[a-z]+@[a-z]+\.[a-z]+', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
print(type(m))
# <class 're.Match'>
Rêz û pozîsyona lihevhatî bi karanîna rêbazên jêrîn ên tiştê lihevhatî têne wergirtin.
- Cihê maçê bistînin:
start()
,end()
,span()
- Rêza lihevhatî bistînin:
group()
- Ji bo her komê rêzê bistînin:
groups()
print(m.start())
# 0
print(m.end())
# 11
print(m.span())
# (0, 11)
print(m.group())
# aaa@xxx.com
Heke hûn beşek ji şêweyek birêkûpêk a birêkûpêk di nav rêzek bi parantezê () ve girêbidin, ew beş dê wekî komek were xebitandin. Di vê rewşê de, rêzika beşê ku bi her komê re di koman de () li hev dike, dikare wekî qertafek were bidestxistin.
m = re.match(r'([a-z]+)@([a-z]+)\.([a-z]+)', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
print(m.groups())
# ('aaa', 'xxx', 'com')
Kontrol bikin ka destpêka rêzekê li hev dike, derxînin: match()
match() eger destpêka rêzikê bi qalibê re bişibîne tişta lihevhatinê vedigerîne.
Wekî ku li jor hatî behs kirin, tişta lihevhatinê dikare were bikar anîn da ku binerxeya lihevhatî derxe, an jî bi tenê ji bo kontrolkirina ka lihevhatinek çêbûye.
match() dê tenê destpêkê kontrol bike. Ger di destpêkê de rêzika lihevhatî tune be, ew Tune vedigerîne.
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
m = re.match(r'[a-z]+@[a-z]+\.com', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
m = re.match(r'[a-z]+@[a-z]+\.net', s)
print(m)
# None
Ji bo maçên ku bi destpêkê ve sînorkirî ne kontrol bikin, derxînin: lêgerîn()
Mîna maçê(), heke li hev bicive, ew tişta lihevhatinê vedigerîne.
Ger çend beşên lihevhatî hebin, tenê beşa hevber a yekem dê were vegerandin.
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
m = re.search(r'[a-z]+@[a-z]+\.net', s)
print(m)
# <re.Match object; span=(26, 37), match='ccc@zzz.net'>
m = re.search(r'[a-z]+@[a-z]+\.com', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
Heke hûn dixwazin hemî beşên lihevhatî bistînin, wekî ku li jêr hatî destnîşan kirin findall() an finditer() bikar bînin.
Kontrol bikin ka tevahiya rêzê li hev dike: fullmatch()
Ji bo kontrol bikin ka tevahiya rêzik bi şêwaza birêkûpêkiya birêkûpêk re têkildar e, fullmatch() bikar bînin. Ev bikêr e, bo nimûne, ji bo kontrolkirina ka rêzek wekî navnîşana e-nameyê derbasdar e an na.
Ger xêzek tev li hev bibe, tişta lihevhatinê tê vegerandin.
s = 'aaa@xxx.com'
m = re.fullmatch(r'[a-z]+@[a-z]+\.com', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
Ger parçeyên nehevkirî hebin (tenê maçên qismî an jî qet hevûdu tune), Yek nayê vegerandin.
s = '!!!aaa@xxx.com!!!'
m = re.fullmatch(r'[a-z]+@[a-z]+\.com', s)
print(m)
# None
Fullmatch() di Python 3.4 de hate zêdekirin. Heke hûn dixwazin di guhertoyên berê de heman tiştî bikin, di dawiyê de match() û karekterek meta ya lihevhatî $ bikar bînin. Heke tevahiya rêzika ji serî heta dawiyê li hev neke, ew vedigere Tune.
s = '!!!aaa@xxx.com!!!'
m = re.match(r'[a-z]+@[a-z]+\.com$', s)
print(m)
# None
Lîsteya hemî beşên lihevhatî bistînin: findall()
findall() lîsteyek ji hemî binerdeyên lihevhatî vedigerîne. Bala xwe bidinê ku hêmanên lîsteyê ne tiştên lihevhatî lê rêzik in.
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
result = re.findall(r'[a-z]+@[a-z]+\.[a-z]+', s)
print(result)
# ['aaa@xxx.com', 'bbb@yyy.com', 'ccc@zzz.net']
Hejmara beşên lihevhatî dikare bi karanîna fonksiyona çêkirî ya len () were kontrol kirin, ku hejmara hêmanên di navnîşê de vedigerîne.
print(len(result))
# 3
Komkirina bi parantezê() di qalibeke birêkûpêk de lîsteyek qertafên ku hêmanên wan rêzikên her komê ne vedigerîne. Ev hevwateya koman() ya di objekta lihevhatinê de ye.
result = re.findall(r'([a-z]+)@([a-z]+)\.([a-z]+)', s)
print(result)
# [('aaa', 'xxx', 'com'), ('bbb', 'yyy', 'com'), ('ccc', 'zzz', 'net')]
Parçeyên komê () dikarin bên hêlîn, ji ber vê yekê heke hûn dixwazin tevhevhevokê jî bi dest bixin, tenê tevahiyê têxin nav parantezê ().
result = re.findall(r'(([a-z]+)@([a-z]+)\.([a-z]+))', s)
print(result)
# [('aaa@xxx.com', 'aaa', 'xxx', 'com'), ('bbb@yyy.com', 'bbb', 'yyy', 'com'), ('ccc@zzz.net', 'ccc', 'zzz', 'net')]
Ger lihevhatinek neyê dîtin, tûlekek vala tê vegerandin.
result = re.findall('[0-9]+', s)
print(result)
# []
Hemî beşên lihevhatî wekî dubareker bistînin: finditer()
finditer() hemî beşên lihevhatî wekî îterator vedigerîne. Hêman ne rêzikên mîna findall(), lê nesneyan li hev dikin, ji ber vê yekê hûn dikarin pozîsyona (indeksa) parçeyên lihevhatî bistînin.
Iterator bixwe nikare bi print() were çap kirin da ku naveroka wê bigire. Heke hûn fonksiyona çêkirî ya next() an daxuyaniya for bikar bînin, hûn dikarin naverokê yek bi yek bistînin.
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
result = re.finditer(r'[a-z]+@[a-z]+\.[a-z]+', s)
print(result)
# <callable_iterator object at 0x10b0efa90>
print(type(result))
# <class 'callable_iterator'>
for m in result:
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
# <re.Match object; span=(13, 24), match='bbb@yyy.com'>
# <re.Match object; span=(26, 37), match='ccc@zzz.net'>
Di heman demê de ew dikare bibe navnîşek bi navnîşê ().
l = list(re.finditer(r'[a-z]+@[a-z]+\.[a-z]+', s))
print(l)
# [<re.Match object; span=(0, 11), match='aaa@xxx.com'>, <re.Match object; span=(13, 24), match='bbb@yyy.com'>, <re.Match object; span=(26, 37), match='ccc@zzz.net'>]
print(l[0])
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
print(type(l[0]))
# <class 're.Match'>
print(l[0].span())
# (0, 11)
Heke hûn dixwazin pozîsyona hemî beşên lihevhatî bistînin, navnîşa têgihîştina navnîşê ji navnîşê hêsantir e ().
print([m.span() for m in re.finditer(r'[a-z]+@[a-z]+\.[a-z]+', s)])
# [(0, 11), (13, 24), (26, 37)]
Iterator bi rêzê hêmanan derdixe. Bala xwe bidinê ku heke hûn hewl bidin ku piştî gihîştina dawiyê bêtir hêman derxînin, hûn ê tiştek nemînin.
result = re.finditer(r'[a-z]+@[a-z]+\.[a-z]+', s)
for m in result:
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
# <re.Match object; span=(13, 24), match='bbb@yyy.com'>
# <re.Match object; span=(26, 37), match='ccc@zzz.net'>
print(list(result))
# []
Parçeyên lihevhatî biguherînin: sub(), subn()
Bi karanîna sub(), hûn dikarin beşa hevgirtî bi rêzek din veguherînin. Rêza cîgir dê were vegerandin.
s = 'aaa@xxx.com, bbb@yyy.com, ccc@zzz.net'
result = re.sub(r'[a-z]+@[a-z]+\.com', 'new-address', s)
print(result)
# new-address, new-address, ccc@zzz.net
print(type(result))
# <class 'str'>
Dema ku bi parantezê() tê komkirin, xêza lihevhatî dikare di rêzika guhezbar de were bikar anîn.
Ji hêla xwerû ve, ya jêrîn tê piştgirî kirin: Bala xwe bidinê ku ji bo rêzikên normal ên ku ne rêzikên xav in, pêdivî ye ku paşkêşkek berî paşkêşkêşê were navnîş kirin da ku ji paşkêşkêşê xilas bibe.
\1 | Paranteza yekem |
\2 | Paranteza duyemîn |
\3 | Paranteza sêyem |
result = re.sub(r'([a-z]+)@([a-z]+)\.com', r'\1@\2.net', s)
print(result)
# aaa@xxx.net, bbb@yyy.net, ccc@zzz.net
?P<xxx>
Ger hûn navê komê bi nivîsandina vê yekê li destpêka paranteza şêweya birêkûpêk a birêkûpêk binivîsin, hûn dikarin wê li şûna hejmarê, wekî ku li jêr tê xuyang kirin, bi karanîna navî diyar bikin.\g<xxx>
result = re.sub(r'(?P<local>[a-z]+)@(?P<SLD>[a-z]+)\.com', r'\g<local>@\g<SLD>.net', s)
print(result)
# aaa@xxx.net, bbb@yyy.net, ccc@zzz.net
Hejmara argumanan hejmara herî zêde ya guherandinê diyar dike. Tenê hejmartina ji milê çepê dê were guheztin.
result = re.sub(r'[a-z]+@[a-z]+\.com', 'new-address', s, count=1)
print(result)
# new-address, bbb@yyy.com, ccc@zzz.net
subn() jimareyek ji rêzika cîgir vedigerîne (eynî nirxa vegerê ya sub()) û hejmara beşên cîgir (hejmara ku bi şêwazê re lihevhatî ye).
result = re.subn(r'[a-z]+@[a-z]+\.com', 'new-address', s)
print(result)
# ('new-address, new-address, ccc@zzz.net', 2)
Rêbaza diyarkirina argûmanan wekî sub() ye. Hûn dikarin beşa ku ji hêla parantezê ve hatî kom kirin bikar bînin, an jî hejmartina argumanan diyar bikin.
result = re.subn(r'(?P<local>[a-z]+)@(?P<SLD>[a-z]+)\.com', r'\g<local>@\g<SLD>.net', s)
print(result)
# ('aaa@xxx.net, bbb@yyy.net, ccc@zzz.net', 2)
result = re.subn(r'[a-z]+@[a-z]+\.com', 'new-address', s, count=1)
print(result)
# ('new-address, bbb@yyy.com, ccc@zzz.net', 1)
Parçekirina rêzan bi şêweyên vegotina rêkûpêk: split()
split() rêzê li beşa ku bi qalibê li hev digire vediqetîne, û wê wekî lîsteyek vedigerîne.
Bala xwe bidinê ku maçên yekem û paşîn dê di serî û dawiya navnîşa encam de rêzikên vala hebin.
s = '111aaa222bbb333'
result = re.split('[a-z]+', s)
print(result)
# ['111', '222', '333']
result = re.split('[0-9]+', s)
print(result)
# ['', 'aaa', 'bbb', '']
Argumana maxsplit herî zêde hejmara perçeyan (parçeyan) diyar dike. Tenê hejmartina ji milê çepê dê were dabeş kirin.
result = re.split('[a-z]+', s, 1)
print(result)
# ['111', '222bbb333']
Metakarakterên birêkûpêk, rêzikên taybetî, û hişyariyên li Python
Karakterên meta yên birêkûpêk ên bingehîn (karakterên taybetî) û rêzikên taybetî yên ku dikarin di modula Python 3 re de werin bikar anîn wiha ne
metakarakter | naveroka |
---|---|
. | Ji xeteke nû her karakterek din (tevî xêzek nû ya bi ala DOTALL) |
^ | Destpêka rêzê (di heman demê de destpêka her rêzê bi ala MULTILINE re têkildar dike) |
$ | Dawiya rêzê (di heman demê de dawiya her rêzê bi ala MULTILINE re têkildar dike) |
* | Nimûneya berê ji 0 caran bêtir dubare bikin |
+ | Nimûneya berê bi kêmanî carekê dubare bikin. |
? | Nimûneya berê 0 an 1 carî dubare bikin |
{m} | Nimûneya berê m caran dubare bikin |
{m, n} | Nimûneya dawîn.m ~n dûbare |
[] | A set of characters[] Bi yek ji van karakteran re têkildar e |
| | ANA|B Nimûneya A an B li hev dike |
rêza taybet | naveroka |
---|---|
\d | Jimarên dehan yên Unicode (ji hêla ala ASCII ve bi hejmarên ASCII ve têne sînorkirin) |
\D | \d Wate berovajî vê yekê ye. |
\s | Karakterên cîhê spî yên Unicode (ji hêla ala ASCII ve bi karakterên cîhê spî yên ASCII ve têne sînorkirin) |
\S | \s Wate berovajî vê yekê ye. |
\w | Karakterên peyva Unicode û binxet (bi tîpên alfan-hejmarî yên ASCII û bi ala ASCII ve bi xêzên jêrîn têne sînordar kirin) |
\W | \w Wate berovajî vê yekê ye. |
Hemû ji wan di vê tabloyê de ne. Ji bo navnîşek tevahî belgeya fermî bibînin.
Di heman demê de bala xwe bidin ku hin wateyên di Python 2 de cûda ne.
Sazkirina alê
Wekî ku di tabloya jor de tê xuyang kirin, hin tîpên meta û rêzikên taybetî li gorî ala moda xwe diguhezînin.
Tenê alayên sereke li vir hatine nixumandin. Ji bo yên din belgeya fermî bibînin.
Bi tîpên ASCII sînorkirî: re.ASCII
\w
Ev ê di heman demê de ji bo rêzikên Python 3-ê kanji-du-byte, tîpên alfanumerîk, hwd. jî bi xwerû bi hev re bide hev. Ew ne wekheviya jêrîn e ji ber ku ew ne birêkûpêkek standard e.[a-zA-Z0-9_]
m = re.match(r'\w+', '漢字ABC123')
print(m)
# <re.Match object; span=(0, 11), match='漢字ABC123'>
m = re.match('[a-zA-Z0-9_]+', '漢字ABC123')
print(m)
# None
Ger hûn di her fonksiyonê de ji bo ala argumanan re.ASCII diyar bikin, an jî ala jêrîn a rêzê li destpêka rêzika nimûneya birêkûpêk zêde bikin, ew ê tenê bi tîpên ASCII-ê bi hev re bişopîne (ew ê bi tîpên Japonî, alfan-hejmarî û hwd. .).(?a)
Di vê rewşê de, du jêrîn wekhev in.\w
#ERROR![a-zA-Z0-9_]
m = re.match(r'\w+', '漢字ABC123', flags=re.ASCII)
print(m)
# None
m = re.match(r'(?a)\w+', '漢字ABC123')
print(m)
# None
Di dema berhevkirina bi re.compile() de heman tişt derbas dibe. Alên argumanan an alayên hundurîn bikar bînin.
p = re.compile(r'\w+', flags=re.ASCII)
print(p)
# re.compile('\\w+', re.ASCII)
print(p.match('漢字ABC123'))
# None
p = re.compile(r'(?a)\w+')
print(p)
# re.compile('(?a)\\w+', re.ASCII)
print(p.match('漢字ABC123'))
# None
ASCII wekî forma kurt a re jî heye. A. Hûn dikarin her du bikar bînin.
print(re.ASCII is re.A)
# True
\W, berevajî \W, di heman demê de ji alên re.ASCII û inline jî tê bandor kirin.
m = re.match(r'\W+', '漢字ABC123')
print(m)
# None
m = re.match(r'\W+', '漢字ABC123', flags=re.ASCII)
print(m)
# <re.Match object; span=(0, 11), match='漢字ABC123'>
Mîna \w, her du tîpên jêrîn ji hêla xwerû ve hem karakterên yek-byte û hem jî du-byte li hev dikin, lê heke alayên re.ASCII an jî yên hundurîn hatine destnîşan kirin bi karakterên yek-byte têne sînordar kirin.
- Hejmara hev bikin
\d
- Cihê vala li hev dike
\s
- Lihevhatina ne-hejmaran dike
\D
- Lihevhatina her ne-cihê.
\S
m = re.match(r'\d+', '123')
print(m)
# <re.Match object; span=(0, 3), match='123'>
m = re.match(r'\d+', '123')
print(m)
# <re.Match object; span=(0, 3), match='123'>
m = re.match(r'\d+', '123', flags=re.ASCII)
print(m)
# <re.Match object; span=(0, 3), match='123'>
m = re.match(r'\d+', '123', flags=re.ASCII)
print(m)
# None
m = re.match(r'\s+', ' ') # full-width space
print(m)
# <re.Match object; span=(0, 1), match='\u3000'>
m = re.match(r'\s+', ' ', flags=re.ASCII)
print(m)
# None
Ne hesas bi dozê ye:re.IGNORECASE
Ji hêla xwerû ve, ew-hesas e. Ji bo ku hûn herduyan bihev bikin, hûn hewce ne ku hem tîpên mezin û hem jî yên piçûk di nav nîgarê de bikin.
re.IGNORECASE
Ger ev were diyar kirin, ew ê bi doz-bêhesiyatî li hev bike. Di bêjeyên birêkûpêk ên standard de ala i wekhev e.
m = re.match('[a-zA-Z]+', 'abcABC')
print(m)
# <re.Match object; span=(0, 6), match='abcABC'>
m = re.match('[a-z]+', 'abcABC', flags=re.IGNORECASE)
print(m)
# <re.Match object; span=(0, 6), match='abcABC'>
m = re.match('[A-Z]+', 'abcABC', flags=re.IGNORECASE)
print(m)
# <re.Match object; span=(0, 6), match='abcABC'>
Hûn dikarin kêmtir an wekhev bikar bînin.
- ala inline
(?i)
- kinkirî
re.I
Destpêk û dawiya her rêzê li hev bikin:re.MULTILINE
^
Karakterên meta yên di vê bilêvkirina birêkûpêk de bi destpêka rêzê re li hev dikin.
Ji hêla xwerû ve, tenê destpêka rêza tevahî tê hev, lê ya jêrîn dê destpêka her rêzê jî bi hev re bike. Di bêjeyên birêkûpêk ên standard de bi ala m re hevwate ye.re.MULTILINE
s = '''aaa-xxx
bbb-yyy
ccc-zzz'''
print(s)
# aaa-xxx
# bbb-yyy
# ccc-zzz
result = re.findall('[a-z]+', s)
print(result)
# ['aaa', 'xxx', 'bbb', 'yyy', 'ccc', 'zzz']
result = re.findall('^[a-z]+', s)
print(result)
# ['aaa']
result = re.findall('^[a-z]+', s, flags=re.MULTILINE)
print(result)
# ['aaa', 'bbb', 'ccc']
$
Di dawiya rêzê de hev dike. Ji hêla xwerû ve, tenê dawiya tevahiya rêzê tête hev kirin.re.MULTILINE
Ger hûn vê yekê diyar bikin, ew ê dawiya her rêzê jî li hev bike.
result = re.findall('[a-z]+$', s)
print(result)
# ['zzz']
result = re.findall('[a-z]+$', s, flags=re.MULTILINE)
print(result)
# ['xxx', 'yyy', 'zzz']
Hûn dikarin kêmtir an wekhev bikar bînin.
- ala inline
(?m)
- kinkirî
re.M
Gelek alayan diyar bikin
|
Heke hûn dixwazin di heman demê de gelek alayan çalak bikin, vê yekê bikar bînin. Di rewşa alayên hundurîn de, divê her karakter bi tîpek wekî ku li jêr tê xuyang kirin were şopandin.(?am)
s = '''aaa-xxx
漢漢漢-字字字
bbb-zzz'''
print(s)
# aaa-xxx
# 漢漢漢-字字字
# bbb-zzz
result = re.findall(r'^\w+', s, flags=re.M)
print(result)
# ['aaa', '漢漢漢', 'bbb']
result = re.findall(r'^\w+', s, flags=re.M | re.A)
print(result)
# ['aaa', 'bbb']
result = re.findall(r'(?am)^\w+', s)
print(result)
# ['aaa', 'bbb']
Lihevhatinên çavbirçî û bêxew
Ev pirsgirêkek gelemperî bi vegotinên birêkûpêk re ye, ne tenê pirsgirêkek Python-ê, lê ez ê li ser wê binivîsim ji ber ku ew meyl dike ku min bikeve tengasiyê.
Ji hêla xwerû ve, ya jêrîn lihevhatinek çavbirçî ye, ku bi rêzika herî dirêj a gengaz re têkildar e.
*
+
?
s = 'aaa@xxx.com, bbb@yyy.com'
m = re.match(r'.+com', s)
print(m)
# <re.Match object; span=(0, 24), match='aaa@xxx.com, bbb@yyy.com'>
print(m.group())
# aaa@xxx.com, bbb@yyy.com
The ? piştî ku ew ê lihevhatinek ne-xemgîn, hindiktirîn encam bide, ku rêza herî kurt a gengaz li hev bike.
*?
+?
??
m = re.match(r'.+?com', s)
print(m)
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
print(m.group())
# aaa@xxx.com
Bala xwe bidinê ku maça çavbirçî ya xwerû dibe ku bi rêzikên neçaverêkirî re têkildar be.