Belgekirin ji bo modula Re ji bo Python 3 in. Modula Re ji bo vegotinên birêkûpêk

Gotinên birêkûpêk hema hema her zimanek bernamekirinê pêkhateyek pir populer e. Ew ji we re dibe alîkar ku hûn zû bigihîjin agahdariya ku hûn hewce ne. Bi taybetî, ew têne bikar anîn dema ku pêdivî ye ku nivîsê bête kirin. Python ji hêla xwerû ve bi modulek taybetî ve tê. re, ku berpirsiyar e ku bi bêjeyên rêkûpêk re bixebite.

Îro em ê bi hûrgulî biaxivin ka ew bi gelemperî çi ye, meriv çawa bi wan re dixebite û modul çawa ye re dê bibe alîkar.

Gotinên birêkûpêk: destpêkek

Bikaranîna bêjeyên birêkûpêk çi ne? Hema hema hemû. Ji bo nimûne, van:

  1. Serlêdanên malperê yên ku pejirandina nivîsê hewce dike. Mînakek tîpîk xerîdarên e-nameya serhêl e.
  2. Her projeyên din ên têkildarî nivîsan, databas û hwd.

Berî ku em dest bi parskirina hevoksaziyê bikin, divê em prensîbên bingehîn ên xebata pirtûkxaneyê bi hûrgulî fam bikin. re û bi gelemperî, çi bi gelemperî li ser wê baş e. Em ê ji pratîka rastîn jî mînakan bidin, ku em ê mekanîzmaya karanîna wan diyar bikin. Hûn dikarin şablonek wusa biafirînin, ji bo we maqûl e ku hûn cûrbecûr operasyonan bi nivîsê re bikin.

Di pirtûkxaneya Re de şablonek çi ye?

Bi wê re, hûn dikarin li agahdariya cûrbecûr bigerin, agahdariya li gorî wan bistînin, da ku fonksiyonên din adaptetir bikin. Û, bê guman, ji bo pêvajoya vê daneyê.

Ji bo nimûne, şablonê jêrîn bistînin: s+. Ew tê wateya her karakterek cîhê. Ger hûn nîşanek plus lê zêde bikin, wê hingê ev tê vê wateyê ku nimûne ji yek cîhek bêtir vedihewîne. Tewra dikare bi tîpên tabloyên ku jê re têne gazî kirin jî li hev bike t+.

Berî ku hûn wan bikar bînin, hûn hewce ne ku pirtûkxaneyê derxînin Re. Piştî wê, em fermanek taybetî bikar tînin ku şablonê berhev bikin. Ev di du gavan de pêk tê.

>>> import re

>>> regex = re.compile('s+')

Bi taybetî, ev kod operasyona berhevkirina şablonek ku dikare were bikar anîn pêk tîne. ji bo nimûne, ji bo lêgerîna cîhan (yek an bêtir).

Bi karanîna bêjeyên birêkûpêk ji rêzikên cihêreng agahdariya veqetandî digirin

Bifikirin ku guhêrbarek me heye ku agahdariya jêrîn tê de heye.

>>> text = """100 INF Informatics

213 MAT Matematîk  

156 KURMANJI KURDISH»»»

Ew sê qursên perwerdehiyê dihewîne. Her yek ji wan ji sê beşan pêk tê - hejmar, kod û nav. Em dibînin ku navbera van peyvan cuda ye. Ji bo ku vê rêzê bike jimar û peyvên cihê, çi bikin? Ji bo bidestxistina vê armancê du rêbaz hene:

  1. fonksiyonek bang bikin ji nû ve perçe kirin.
  2. fonksiyonê bicîh bikin qelişandin bo regex.

Li vir mînakek karanîna hevoksaziya her rêbazê ji bo guhêrbara me ye.

>>> re.split('s+', text)  

# an

>>> regex.split(text)

Derketin: ['100', 'INF', 'Zanistiya Kompîturê', '213', 'MAT', 'Math', '156', 'ENG', 'Îngilîzî']

Bi gelemperî, her du rêbaz dikarin bêne bikar anîn. Lê bi rastî pir hêsantir e ku meriv bêjeyek birêkûpêk li şûna karanîna fonksiyonê gelek caran bikar bîne. ji nû ve perçe kirin.

Dîtina maçên bi sê fonksiyonan

Em bibêjin ku divê em tenê jimareyan ji rêzekê derxînin. Ji bo vê divê çi bê kirin?

re.findall()

Li vir dozek karanîna fonksiyonê ye findall(), ku digel biwêjên birêkûpêk, dihêle hûn rûdanên yek an jî çend hejmaran ji guherbarek nivîsê derxînin.

>>> çapkirin(nivis)  

100 INF Informatics

213 MAT Matematîk  

156 KURMANJI KURDISH

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(text)  

['100', '213', '156']

Li gel sembola d, me şablonek bikar anî ku bi tevahî nirxek hejmarî ya ku di guhêrbarek an nivîsê de cih digire destnîşan dike. Û ji ber ku me yek + li wir zêde kir, ev tê vê wateyê ku divê bi kêmanî yek hejmar hebe. 

Her weha hûn dikarin nîşana * bikar bînin da ku diyar bikin ku hebûna jimareyek ji bo peydakirina berhevokê ne hewce ye.

Lê di rewşa me de, ji ber ku me + bikar anî, me jê derxist findall() 1 an bêtir navnîşên dîjîtal ên qursan ji nivîsê. Bi vî rengî, di rewşa me de, vegotinên birêkûpêk wekî mîhengên fonksiyonê tevdigerin.

re.search() vs re.match()

Wekî ku hûn dikarin ji navê fonksiyonan texmîn bikin, yekem li hevokek di nivîsê de digere. Pirs: Ferqa di navbera çi ye findall? Mesele ev e ku ew tiştek taybetî ya ku bi şêwazê li hev dike vedigerîne, û ne tevahiya rêzika encamên hatine dîtin di forma navnîşê de, mîna fonksiyona berê.

Di encamê de, fonksiyona re.match heman tiştî dike. Tenê hevoksazî cuda ye. Divê şablon di destpêkê de were danîn. 

Werin em mînakek ku vê yekê nîşan dide.

>>> # bi nivîsê guherbarekê biafirîne

>>> text2 = «»» Înformatîk INF

213 MAT Mathematics 156″»»  

>>> # regex berhev bikin û li şablonan bigerin

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> çap bike('Indeksa yekem: ', s.start())  

>>> çap bike('Indeksa dawî: ', s.end())  

>>> çapkirin(text2[s.start():s.end()]) 

Indeksa yekem: 17 

Indeksa dawî: 20

213

Heke hûn dixwazin bi rengek cûda encamek wekhev bistînin, hûn dikarin fonksiyonê bikar bînin kom().

Li şûna beşek nivîsê bi pirtûkxaneya Re

Ji bo şûna nivîsê, fonksiyonê bikar bînin re.sub(). Bifikirin ku navnîşa qursên me hinekî guherî. Em dibînin ku piştî her nirxek dîjîtal tabloyek me heye. Erka me ev e ku em hemî vê rêzê di yek rêzê de berhev bikin. Ji bo vê yekê, em hewce ne ku bêjeya s+ veguherînin derbas bibin 

Nivîsa orîjînal ev bû:

# guherbarek bi nivîsê biafirîne

>>> text = “””100 INF t Înformatîk

213 MAT t Math  

156 KURMANJI KURDISH»»»  

>>> çapkirin(nivis)  

100 INFO Zanistiya computer

213 MAT Matematîk  

156 ENG English

Ji bo pêkanîna operasyona xwestî, me rêzikên jêrîn ên kodê bikar anîn.

# yek an çend cîhan bi 1 veguherînin

>>> regex = re.compile('s+')  

>>> çapkirin(regex.sub(' ', nivîs))  

Di encamê de yek rêzek me heye. 

101 COM Computers 205 MAT Matematîk 189 ENG Îngilîzî

Niha pirsgirêkek din bifikirin. Em bi erka danîna cihan re rû bi rû ne. Ji bo me pir girîngtir e ku navên hemî qursan li ser rêzek nû dest pê bikin. Ji bo vê yekê, bêjeyek din tê bikar anîn ku xetek nû li îstîsnayê zêde dike. Ev çi cûre îfade ye?

Pirtûkxane Re taybetmendiyek wekî berhevdana neyînî piştgirî dike. Ciyawaziya wê ji ya rasterast di wê de ye ku li ber şiklê qîrînek heye. Ango ger hewce bike ku em ji karaktera xêza nû derbikevin, wê demê divê em li şûna n !n binivîsin.

Em koda jêrîn bistînin.

# ji xeynî xêza nû, hemî cîhan rakin  

>>> regex = re.compile('((?!n)s+)')  

>>> çapkirin(regex.sub(' ', nivîs))  

100 INF Informatics

213 MAT Matematîk  

156 KURMANJI KURDISH

Komên îfadeya birêkûpêk çi ne?

Bi alîkariya komên bêjeyên birêkûpêk, em dikarin tiştên xwestinê di forma hêmanên cihê de, ne di yek rêzê de, bistînin. 

Bifikirin ku divê em hejmar, kod û navê qursê ne di yek rêzê de, lê wekî hêmanên cihê bistînin. Ji bo ku hûn peywirê biqedînin, hûn ê hewce bikin ku hejmareke mezin ji rêzikên nehewce yên kodê binivîsin. 

Bi rastî, kar dikare pir hêsan bibe. Hûn dikarin şablonê ji bo hemî navnîşan berhev bikin û tenê daneyên ku hûn hewce ne ku ji kemberan bistînin diyar bikin.

Dê hejmareke pir hindik rêz hebin. 

# komên bê guman şablonên nivîsê biafirînin û wan derxînin

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(nexşeya_kurs, nivîs)  

[('100', 'INF', 'Zanistiya Kompîturê'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Îngilîzî')]

Têgeha lihevhatina "xemgîn".

Li gorî standard, vegotinên birêkûpêk têne bernamekirin ku mîqdara herî zêde ya daneyên hevber derxînin. Û heta ku hûn pir kêmtir hewce ne.

Ka em li mînakek kodek HTML-ê li cihê ku divê em etîketê bistînin binêrin.

>>> text = "Nimûneya Lihevkirina Birêvebiriya Birêkûpêk a Xezeb"  

>>> re.findall('', text)  

['Mînaka Lihevhatina Vebêja Birêkûpêk a Greedy']

Li şûna ku tenê yek etîketê derxe, Python tevahiya rêzê girt. Ji ber vê yekê jê re dibêjin xedar.

Û çi bikin ku tenê tagê bistînin? Di vê rewşê de, hûn hewce ne ku lihevhatina lazy bikar bînin. Ji bo diyarkirina biwêjeke wiha, nîşana pirsê li dawiya şablonê tê zêdekirin.

Hûn ê koda jêrîn û hilberîna wergêrê bistînin.

>>> re.findall('', text)  

[”,”]

Ger hewce be ku tenê bûyera yekem were dîtin, wê hingê rêbaz tê bikar anîn lêgerîn ().

re.search('', text).group()  

"

Wê hingê tenê nîşana vekirinê dê were dîtin.

Şablonên Îfadeya Popular

Li vir tabloyek heye ku di nav xwe de şêwazên birêkûpêk ên herî gelemperî têne bikar anîn hene.

Belgekirin ji bo modula Re ji bo Python 3 in. Modula Re ji bo vegotinên birêkûpêk

Xelasî

Me ji bo xebata bi vegotinên birêkûpêk tenê rêbazên herî bingehîn nirxand. Di her rewşê de, we dît ku ew çiqas girîng in. Û li vir ferq nake ka gelo pêdivî ye ku meriv tevaya nivîsê an perçeyên wê yên ferdî parsek bike, gelo pêdivî ye ku postek li ser tora civakî were analîz kirin an berhevkirina daneyan ji bo ku paşê wê were xebitandin. Gotinên birêkûpêk di vê mijarê de alîkarek pêbawer in.

Ew destûrê didin we ku hûn karên wekî:

  1. Diyarkirina forma daneyê, wek navnîşana e-nameyek an jimareya têlefonê.
  2. Danîna têlekî û dabeşkirina wê li çend têlên piçûktir.
  3. Bi nivîsê re operasyonên cihêreng bikin, wek lêgerîn, derxistina agahdariya pêwîst, an li şûna beşek karakteran.

Gotinên birêkûpêk di heman demê de dihêle hûn karên ne-pîvan jî bikin. Di nihêrîna pêşîn de, fêrbûna vê zanistê ne hêsan e. Lê di pratîkê de, her tişt standardîzekirî ye, ji ber vê yekê bes e ku meriv wê yek carî fêhm bike, piştî ku ev amûr dikare ne tenê di Python, lê di her zimanek bernamesaziyê de jî were bikar anîn. Tewra Excel jî îfadeyên birêkûpêk bikar tîne da ku hilberîna daneyê bixweber bike. Ji ber vê yekê guneh e ku meriv vê amûrê bikar neynin.

Leave a Reply