Dogfennaeth ar gyfer y modiwl Re ar gyfer Python 3 mewn . Ail fodiwl ar gyfer ymadroddion rheolaidd

Mae ymadroddion rheolaidd yn elfen boblogaidd iawn o bron unrhyw iaith raglennu. Maent yn eich helpu i gael mynediad cyflym at y wybodaeth sydd ei hangen arnoch. Yn benodol, fe'u defnyddir pan fo angen prosesu testun. Daw Python gyda modiwl arbennig yn ddiofyn. re, sy'n gyfrifol am weithio gydag ymadroddion rheolaidd.

Heddiw, byddwn yn siarad yn fanwl am yr hyn ydyw yn gyffredinol, sut i weithio gyda nhw a sut y modiwl re yn helpu.

Ymadroddion rheolaidd: cyflwyniad

Beth yw defnydd ymadroddion rheolaidd? Bron i gyd. Er enghraifft, y rhain:

  1. Cymwysiadau gwe sydd angen dilysu testun. Enghraifft nodweddiadol yw cleientiaid post ar-lein.
  2. Unrhyw brosiectau eraill sy'n ymwneud â thestunau, cronfeydd data ac ati.

Cyn i ni ddechrau dosrannu'r gystrawen, dylem ddeall yn fanylach egwyddorion sylfaenol gweithrediad y llyfrgell re ac yn gyffredinol, yr hyn sydd dda yn gyffredinol am dano. Byddwn hefyd yn rhoi enghreifftiau o arfer go iawn, lle byddwn yn disgrifio mecanwaith eu defnydd. Gallwch greu templed o'r fath, sy'n addas i chi berfformio amrywiaeth eang o weithrediadau gyda thestun.

Beth yw templed yn y Re library?

Ag ef, gallwch chwilio am wybodaeth o wahanol fathau, cael gwybodaeth sy'n cyfateb iddynt, er mwyn gwneud swyddogaethau eraill yn fwy addasol. Ac, wrth gwrs, i brosesu'r data hwn.

Er enghraifft, cymerwch y templed canlynol: s+. Mae'n golygu unrhyw gymeriad gofod. Os ydych chi'n ychwanegu arwydd plws ato, yna mae hyn yn golygu bod y patrwm yn cynnwys mwy nag un gofod. Gall hyd yn oed gyfateb nodau tab sy'n cael eu galw gyda t+.

Cyn eu defnyddio, mae angen i chi fewnforio'r llyfrgell Re. Ar ôl hynny, rydym yn defnyddio gorchymyn arbennig i lunio'r templed. Gwneir hyn mewn dau gam.

>>> mewnforio re

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

Yn benodol, mae'r cod hwn yn cyflawni gweithrediad llunio templed y gellir ei ddefnyddio. er enghraifft, i chwilio am ofodau (un neu fwy).

Cael gwybodaeth ar wahân o wahanol linynnau gan ddefnyddio mynegiadau rheolaidd

Tybiwch fod gennym newidyn sy'n cynnwys y wybodaeth ganlynol.

>>> text = “””100 INF Gwybodeg

213 Mathemateg MAT  

156 WEL Saesneg»»»

Mae'n cynnwys tri chwrs hyfforddi. Mae pob un ohonynt yn cynnwys tair rhan - rhif, cod ac enw. Gwelwn fod y cyfwng rhwng y geiriau hyn yn wahanol. Beth i'w wneud er mwyn torri'r llinell hon yn rifau a geiriau ar wahân? Mae dwy ffordd i gyrraedd y nod hwn:

  1. ffoniwch swyddogaeth ail.hollti.
  2. cymhwyso swyddogaeth rhannu ar gyfer regex.

Dyma enghraifft o ddefnyddio cystrawen pob un o'r dulliau ar gyfer ein newidyn.

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

# neu

>>> regex.split(testun)

Allbwn: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Yn gyffredinol, gellir defnyddio'r ddau ddull. Ond mewn gwirionedd mae'n llawer haws defnyddio mynegiant rheolaidd yn lle defnyddio'r swyddogaeth sawl gwaith. ail.hollti.

Dod o hyd i gyfatebiaethau â thair swyddogaeth

Gadewch i ni ddweud bod angen i ni dynnu rhifau yn unig o linyn. Beth sydd angen ei wneud ar gyfer hyn?

ail-ganfod()

Dyma achos defnydd ar gyfer y swyddogaeth darganfod (), sydd, ynghyd ag ymadroddion rheolaidd, yn eich galluogi i echdynnu digwyddiadau o un neu fwy o rifau o newidyn testun.

>>> print(testun)  

100 Gwybodeg INF

213 Mathemateg MAT  

156 WEL Sais

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

>>> regex_num.findall(testun)  

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

Ynghyd â'r symbol d, gwnaethom ddefnyddio templed sy'n nodi'n llwyr unrhyw werth rhifol sydd wedi'i leoli mewn newidyn neu destun. Ac ers i ni ychwanegu un + yno, mae hyn yn golygu bod yn rhaid i o leiaf un rhif fod yn bresennol. 

Gallwch hefyd ddefnyddio'r arwydd * i nodi nad oes angen presenoldeb digid er mwyn dod o hyd i gyfatebiaeth.

Ond yn ein hachos ni, ers i ni ddefnyddio +, rydym yn echdynnu gyda darganfod () 1 neu fwy o ddynodiadau digidol o gyrsiau o'r testun. Felly, yn ein hachos ni, mae ymadroddion rheolaidd yn gweithredu fel gosodiadau ar gyfer y swyddogaeth.

ymchwil() vs ail.match()

Fel y gallwch chi ddyfalu o enw'r swyddogaethau, mae'r cyntaf yn chwilio am gyfatebiaeth yn y testun. Cwestiwn: Beth yw'r gwahaniaeth rhwng dod o hyd? Y pwynt yw ei fod yn dychwelyd gwrthrych penodol sy'n cyfateb i'r patrwm, ac nid y dilyniant cyfan o ganlyniadau a ddarganfuwyd ar ffurf rhestr, fel y ffwythiant blaenorol.

Yn ei dro, mae'r swyddogaeth re.match yn gwneud yr un peth. Dim ond y gystrawen sy'n wahanol. Rhaid gosod y templed ar y dechrau. 

Gadewch i ni gymryd enghraifft sy'n dangos hyn.

>>> # creu newidyn gyda thestun

>>> text2 = «»» INF Gwybodeg

213 MAT Mathemateg 156″»»  

>>> # llunio regex a chwilio am batrymau

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

>>> s = regex_num.search(text2)  

>>> print('Mynegai cyntaf:', s.start())  

>>> print('Mynegai diwethaf:', s.end())  

>>> print(testun2[s.start():s.end()]) 

Mynegai cyntaf: 17 

Mynegai olaf: 20

213

Os ydych chi am gael canlyniad tebyg mewn ffordd wahanol, gallwch chi ddefnyddio'r swyddogaeth grŵp ().

Amnewid rhan o destun gyda Re library

I ddisodli testun, defnyddiwch y swyddogaeth ail.sub(). Tybiwch fod ein rhestr o gyrsiau wedi newid ychydig. Rydyn ni'n gweld bod gennym ni dab ar ôl pob gwerth digidol. Ein tasg ni yw cyfuno'r holl ddilyniant hwn yn un llinell. I wneud hyn, mae angen i ni ddisodli'r ymadrodd s+ pasio 

Y testun gwreiddiol oedd:

# creu newidyn gyda thestun

>>> text = “””100 INF t Gwybodeg

213 MAT t Math  

156 ENG t Saesneg »»»  

>>> print(testun)  

100 GWYBODAETH Cyfrifiadureg

213 MAT Mathemateg  

156 LLOEGR Saesneg

I gyflawni'r llawdriniaeth a ddymunir, fe wnaethom ddefnyddio'r llinellau cod canlynol.

# disodli un neu fwy o fylchau ag 1

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

>>> print(regex.sub('', testun))  

O ganlyniad, mae gennym un llinell. 

101 Cyfrifiaduron COM 205 MAT Mathemateg 189 WEL English

Nawr ystyriwch broblem arall. Nid ydym yn wynebu'r dasg o osod gofodau. Mae'n bwysicach o lawer i ni fod pob enw cwrs yn dechrau ar linell newydd. I wneud hyn, defnyddir ymadrodd arall sy'n ychwanegu llinell newydd at yr eithriad. Pa fath o fynegiant yw hwn?

Llyfrgell Re yn cefnogi nodwedd fel paru negyddol. Mae'n wahanol i'r un uniongyrchol gan ei fod yn cynnwys ebychnod cyn y slaes. Hynny yw, os oes angen i ni hepgor y nod llinell newydd, yna mae angen i ni ysgrifennu !n yn lle n.

Rydym yn cael y cod canlynol.

# dileu pob bwlch ac eithrio llinell newydd  

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

>>> print(regex.sub('', testun))  

100 Gwybodeg INF

213 Mathemateg MAT  

156 WEL Sais

Beth yw grwpiau mynegiant rheolaidd?

Gyda chymorth grwpiau o ymadroddion rheolaidd, gallwn gael y gwrthrychau a ddymunir ar ffurf elfennau ar wahân, ac nid mewn un llinell. 

Tybiwch fod angen i ni gael rhif, cod ac enw'r cwrs nid mewn un llinell, ond fel elfennau ar wahân. I gwblhau'r dasg, bydd angen i chi ysgrifennu nifer fawr o linellau cod diangen. 

Mewn gwirionedd, gellir symleiddio'r dasg yn fawr. Gallwch chi lunio'r templed ar gyfer pob cofnod a nodi'r data y mae angen i chi ei gael o'r cromfachau.

Bydd nifer fach iawn o linellau. 

# creu grwpiau o dempledi testun cwrs a'u hechdynnu

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

>>> re.findall(cwrs_pattern, testun)  

[('100', 'INF', 'Cyfrifiadureg'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Saesneg')]

Y cysyniad o baru “barus”.

Yn ôl y safon, mae mynegiadau rheolaidd yn cael eu rhaglennu i dynnu'r uchafswm o ddata paru. A hyd yn oed os oes angen llawer llai arnoch chi.

Edrychwn ar god HTML sampl lle mae angen i ni gael y tag.

>>> text = “Enghraifft o Gyfateb Mynegiant Rheolaidd Barus”  

>>> ail.findall('', testun)  

['Enghraifft o Gyfateb Mynegiant Rheolaidd Barus']

Yn hytrach na thynnu un tag yn unig, cafodd Python y llinyn cyfan. Dyna pam y'i gelwir yn farus.

A beth i'w wneud i gael y tag yn unig? Yn yr achos hwn, mae angen i chi ddefnyddio paru diog. I nodi mynegiant o'r fath, ychwanegir marc cwestiwn at ddiwedd y patrwm.

Byddwch yn cael y cod canlynol ac allbwn y cyfieithydd.

>>> ail.findall('', testun)  

[”, ”]

Os yw'n ofynnol i gael y digwyddiad cyntaf yn unig, yna defnyddir y dull chwilio ().

ymchwil ('', testun).group()  

"

Yna dim ond y tag agoriadol a geir.

Templedi Mynegiant Poblogaidd

Dyma dabl sy'n cynnwys y patrymau mynegiant rheolaidd a ddefnyddir amlaf.

Dogfennaeth ar gyfer y modiwl Re ar gyfer Python 3 mewn . Ail fodiwl ar gyfer ymadroddion rheolaidd

Casgliad

Dim ond y dulliau mwyaf sylfaenol rydym wedi'u hystyried ar gyfer gweithio gydag ymadroddion rheolaidd. Beth bynnag, rydych chi wedi gweld pa mor bwysig ydyn nhw. Ac yma nid yw'n gwneud unrhyw wahaniaeth a oes angen dosrannu'r testun cyfan neu ei ddarnau unigol, p'un a oes angen dadansoddi post ar rwydwaith cymdeithasol neu gasglu data er mwyn ei brosesu yn nes ymlaen. Mae ymadroddion rheolaidd yn gynorthwyydd dibynadwy yn y mater hwn.

Maent yn caniatáu ichi gyflawni tasgau fel:

  1. Pennu fformat y data, megis cyfeiriad e-bost neu rif ffôn.
  2. Cael llinyn a'i rannu'n sawl llinyn llai.
  3. Perfformio gweithrediadau amrywiol gyda thestun, megis chwilio, echdynnu'r wybodaeth angenrheidiol, neu ddisodli rhan o'r nodau.

Mae ymadroddion rheolaidd hefyd yn caniatáu ichi berfformio gweithrediadau nad ydynt yn ddibwys. Ar yr olwg gyntaf, nid yw meistroli'r wyddoniaeth hon yn hawdd. Ond yn ymarferol, mae popeth wedi'i safoni, felly mae'n ddigon i ddarganfod unwaith, ac ar ôl hynny gellir defnyddio'r offeryn hwn nid yn unig yn Python, ond hefyd mewn unrhyw iaith raglennu arall. Mae hyd yn oed Excel yn defnyddio mynegiadau rheolaidd i awtomeiddio prosesu data. Felly mae'n bechod peidio â defnyddio'r offeryn hwn.

Gadael ymateb