Python

Regulaaravaldised, kasutades Python 3

Regulaaravaldised, kasutades Python 3
Regulaaravaldisi peetakse sageli nii, et see on tõesti varjamatute hieroglüüfide seeria, mille inimene tavaliselt Internetist kopeerib ja oma koodi kleebib. See salapärane loits näitab siis maagilisi võimeid leida mustreid tekstistringidest ja kui me seda kenasti küsime, teeb see meile isegi teene, kui asendada stringis antud muster millegi toredamaga.

Näiteks kui kirjutate URL-i jaoks käitlejaid (ja Jumal aitab teid, kui kirjutate seda nullist), soovite sageli kuvada sama tulemuse olenemata URL-i lõpust '/'. E.g https: // näide.com / user / settings / ja https: // näide.com / user / settings peaksid mõlemad suunama samale lehele, vaatamata sellele järgnevale '/'. 

Siiski ei saa eirata kõiki kaldkriipse, näiteks:

  1. Kaldkriips 'kasutaja' ja 'seaded', e, 'kasutaja / seaded' vahel.
  2. Samuti peate arvestama FQDN-i alguses olevaga '//', millele järgneb 'https'.

Nii tulete välja sellise reegliga: „Eirake ainult kaldkriipsu, millele järgneb tühi koht.”Ja kui soovite, saate selle reegli kodeerida rea ​​if-else lausetega. Kuid see muutub üsna tülikaks. Võite kirjutada funktsiooni öeldes cleanUrl (), mis võib selle teie jaoks kapseldada. Kuid universum hakkab varsti teie poole rohkem kõveraid palli viskama. Varsti leiad endale funktsioonid cleanHeaders (), processLog () jne kirjutamiseks. Või võite kasutada regulaaravaldist alati, kui on vaja mingit mustrite sobitamist.

Standardne IO ja failid

Enne regulaaravaldiste üksikasjadesse jõudmist tasub mainida mudelit, mis enamikul süsteemidel on tekstivoogude jaoks olemas. Siin on selle lühike (mittetäielik) kokkuvõte:

  1. Teksti töödeldakse (ühe) tähemärkidena.
  2. See voog võib pärineda Unicode'i või ASCII teksti failist või standardsisest sisendist (klaviatuur) või kaugvõrguühendusest. Pärast töötlemist, näiteks regex-skripti abil, läheb väljund kas faili- või võrguvoogu või standardväljundisse (nt.g, konsool)
  3. Voog koosneb ühest või mitmest reast. Igal real on null või enam märki, millele järgneb uus rida.

Lihtsuse huvides tahan, et te kujutaksite, et fail koosneb ridadest, mis lõpevad uue rea tähemärgiga. Me jagame selle faili üksikuteks ridadeks (või stringideks), mis lõpevad kas uue rea või tavalise tähemärgiga (viimase rea jaoks).

Regexid ja stringid

Regexil pole failidega eriti midagi pistmist. Kujutage seda musta kastina, mis võib sisestada mis tahes suvalise (piiratud) pikkusega stringi ja kui see on selle stringi lõppu jõudnud, saab ta kas:

  1. Nõustuge stringiga. Teisisõnu string tikud regulaaravaldis (regex).
  2. Lükka string tagasi, s.t.e, string ei ole matš regulaaravaldis (regex).

Vaatamata selle mustale kastile-y iseloomule, lisan sellele machinari veel mõned piirangud. Regex ütleb stringi järjestikku, vasakult paremale ja see loeb korraga ainult ühte märki. Nii et nöör „LinuxHint” koos loetakse järgmiselt:

'L "i" n "u" x "H" i "n" t' [vasakult paremale]

Alustame lihtsalt

Regexi kõige lihtsamaks tüübiks oleks otsida ja sobitada string C. Selle regulaarne avaldis on lihtsalt "C". Üsna tühine. See, kuidas seda Pythonis teha, nõuab kõigepealt faili importimist re moodul regulaarsete avaldiste jaoks.

>>> impordi uuesti

Seejärel kasutame funktsiooni re.otsing(muster, nöör) kus muster on meie regulaarne väljend ja string sisendstringis, milles me mustrit otsime.

>>> re.otsing ('C', 'Selles lauses on tahtlik C')

Funktsioon võtab mustri "C", otsib seda sisendstringist ja prindib asukoha (span) kus nimetatud muster on leitud. See stringi osa, see alamstring sobib meie regulaaravaldisega. Kui sellist vastet ei leitud, oleks väljund a Puudub objekt.

Samamoodi saate otsida mustrit "regulaaravaldis" järgmiselt:

>>> re.otsing (“regulaaravaldis”, “Saame mustrite otsimiseks kasutada regulaaravaldisi.”)

re.otsing (), uuesti.vaste () ja uuesti.täielik vaste ()

Kolm mooduli kasulikku funktsiooni hõlmavad järgmist:

1.  re.otsing(muster, nöör)

See tagastab alamstringi, mis sobib mustriga, nagu eespool nägime. Kui vastet ei leita, siis Puudub tagastatakse. Kui mitu alamstringi vastavad antud mustrile, teatatakse ainult esimesest esinemisest.

2.  re.vaste (muster, nöör)

See funktsioon püüab sobitada tarnitud mustrit stringi algusest peale. Kui kusagil poolel teel tekib paus, naaseb ta Puudub.

Näiteks,

>>> re.matš ("Joh", "John Doe")

Kus string "Minu nimi on John Doe" ei sobi ja seega Puudub tagastatakse.

>>> print (re.vaste (“Joh”, “Minu nimi on John Doe”))
Puudub

3.  re.täielik vaste (muster, nöör)

See on rangem kui mõlemad ülaltoodud ja püüab leida stringi mustri täpse vaste, muidu vaikimisi Puudub.

>>> print (re.täismäng ("Joh", "Joh"))

# Kõik muu ei sobi

Ma kasutan lihtsalt re.otsing() funktsioon ülejäänud artiklis. Alati, kui ma ütlen, et regex aktsepteerib seda stringi, tähendab see seda, et athe re.otsing() Funktsioon on leidnud sisendstringist sobiva alamstringi ja tagastanud selle asemel Puudubobjekt.

Erimärgid

Regulaarsetest väljenditest nagu „John” ja „C” pole palju kasu. Vajame erimärke, mida regulaaravaldiste kontekstis konkreetne tähendus tähendab. Siin on mõned näited:

    1. ^ - see sobib stringi algusega. Näiteks sobib '^ C' kõik stringid, mis algavad tähega C.
    2. $ - see sobib rea lõpuga.
    3. . - Punkt tähistab ühte või mitut tähemärki, välja arvatud uus rida.
    4. * - see on sellele eelnenud tähemärgi null või rohkem. Seega vastab b * 0 või enamale b esinemisjuhule. ab * sobib lihtsalt a, ab ja a-ga
    5. + - See on sellele eelnenud ühe või mitme tegelase jaoks. Seega vastab b + 1 või enamale b esinemisjuhule. ab * sobib lihtsalt a, ab ja a-ga
    6. \ - tagasilööke kasutatakse regeksides põgenemisjärjestusena. Nii et soovite regulaaravaldist, et otsida rea ​​lõpus oleva dollari sümbol '$' sõna otseses mõttes. Võite kirjutada \ $ regulaaravaldises.
    7. Lokkisulgudega saab määrata korduste arvu, mida soovite näha. Näiteks selline muster nagu ab 10 tähistab stringi a, millele järgneb 10 b, sobib selle mustriga. Võite määrata ka arvude vahemiku, näiteks b 4,6 vastab stringidele, mis sisaldavad b järjestikku 4 kuni 6 korda järjest. Nelja või enama korduse muster eeldaks vaid lõpukoma, näiteks b 4,
    8. Nurksulgudes ja tähemärkide vahemikus. RE nagu [0-9] võib toimida kohatäitjana mis tahes numbri vahemikus 0 kuni 9. Samamoodi võite kasutada numbreid vahemikus üks kuni viis [1–5] või sobitada suurtähtede kasutustähti [A-Z] või tähestiku tähti, olenemata sellest, kas tegemist on suure või väikese tähega [A-z].
      Näiteks sobib iga täpselt kümnest numbrist koosnev string tavaväljendiga [0-9] 10, mis on üsna kasulik, kui otsite antud stringist telefoninumbreid.
    9. Võite luua OR-i sarnase lause, kasutades | märk, kus regulaarne avaldis koosneb kahest või enamast regulaaravaldisest, näiteks A ja B. Regex A | B on vaste, kui sisendstring on kas regulaaravaldise A või B vaste.
    10. Erinevaid regexe saate rühmitada. Näiteks vastab regeks (A | B) C regexidele AC ja

Seal on palju muud, mida katta, kuid ma soovitaksin oma aju ülekoormamise asemel palju ebaselgeid sümboleid ja servajuhtumeid õppides minna õppima. Kahtluste korral on Pythoni dokumendid suureks abiks ja nüüd teate piisavalt, et dokumente hõlpsalt jälgida.

Käed kogemuste ja viidete kohta

Kui soovite oma regexi visuaalset tõlgendust näha, võite külastada Debuggexi. See sait genereerib teie regexi vaate reaalajas ja võimaldab teil seda testida erinevate sisestusstringide alusel.

Regulaaravaldiste teoreetilise aspekti kohta lisateabe saamiseks võiksite vaadata Michael Sipseri arvutiteooria sissejuhatuse paari esimest peatükki. Selle väga lihtne jälgida ja näitab regulaarsete väljendite kui arvutamise enda põhimõiste olulisust!

HD Remastered Games Linuxile, millel pole kunagi varem Linuxi väljalaset olnud
Paljud mängude arendajad ja kirjastajad pakuvad frantsiisi eluea pikendamiseks välja vanade mängude HD-remasteri. Palun fännid, kes soovivad ühilduvus...
Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...
Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...