„Python“

Reguliarūs posakiai naudojant „Python 3“

Reguliarūs posakiai naudojant „Python 3“
Reguliarūs posakiai dažnai matomi, nes tai tikrai neaiški hieroglifų serija, kurią paprastai nukopijuoja iš interneto ir įklijuoja į savo kodą. Tada šis paslaptingas burtas parodo stebuklingas galimybes surasti modelius teksto eilutėse ir, jei mes to gražiai paprašysime, tai mums bus naudinga pakeisti tam tikrą eilutės modelį kažkuo gražesniu.

Pvz., Kai rašote URL tvarkytuvus (o Dievas jums padės, jei rašote jį nuo nulio), dažnai norėsite rodyti tą patį rezultatą, neatsižvelgdami į URL galą „/“. E.g https: // pavyzdys.com / user / settings / ir https: // pavyzdys.„com / user / settings“ turėtų nukreipti į tą patį puslapį, nepaisant „/“. 

Tačiau negalima ignoruoti visų priekinių brūkšnių, pvz .:

  1. Pasvirasis brūkšnys tarp „vartotojas“ ir „nustatymai“, e, „vartotojas / nustatymai“.
  2. Taip pat turėsite atsižvelgti į „//“ FQDN pradžioje, po kurio bus „https“.

Taigi, jūs sugalvojate tokią taisyklę: „Nepaisykite tik priekinių brūkšnių, po kurių tuščia vieta.“Ir, jei norite, galite užkoduoti šią taisyklę teiginių„ if-else “serija. Bet tai bus gana sunku. Galite parašyti funkciją sakydami „cleanUrl“ (), kuri gali tai užfiksuoti jums. Tačiau visata netrukus pradės mėtyti daugiau kreivų. Netrukus rasite rašymo „cleanHeaders“ (), „processLog“ () ir kt. Funkcijas. Arba galite naudoti įprastą išraišką, kai reikia bet kokio modelio atitikimo.

Standartinis IO ir failai

Prieš pradėdami nagrinėti reguliarių posakių detales, verta paminėti modelį, kurį dauguma sistemų naudoja teksto srautams. Čia yra trumpa (neišsami) jo santrauka:

  1. Tekstas apdorojamas kaip (vienas) simbolių srautas.
  2. Šis srautas gali kilti iš „Unicode“ ar ASCII teksto failo arba iš standartinio įvesties (klaviatūros) arba iš nuotolinio tinklo ryšio. Apdorojus, tarkim, naudojant regex scenarijų, išvestis arba eina į failą, tinklo srautą, arba į standartinę išvestį (pvz.,.g, konsolė)
  3. Srautą sudaro viena ar daugiau eilučių. Kiekvienoje eilutėje yra nulis ar daugiau simbolių, po kurių eina nauja eilutė.

Paprastumo sumetimais noriu, kad pavaizduotumėte, jog failas sudarytas iš eilučių, kurios baigiasi naujos eilutės simboliu. Mes suskaidome šį failą į atskiras eilutes (arba eilutes), kurių kiekvienas baigiasi nauja eilute arba įprastu simboliu (paskutinei eilutei).

Regexai ir styginiai

Regexas neturi nieko bendro su failais. Įsivaizduokite, kad tai yra juoda dėžutė, į kurią galima įvestis bet kokią savavališką bet kokio (baigtinio) ilgio eilutę, o pasiekusi šios eilutės pabaigą, ji gali:

  1. Priimkite eilutę. Kitaip tariant, eilutė degtukai reguliarioji išraiška (regex).
  2. Atmeskite eilutę, t.e, eilutė nėra rungtynės reguliarioji išraiška (regex).

Nepaisant juodosios dėžės y pobūdžio, aš pridėsiu dar keletą apribojimų šiai machinacijai. Regexas nuskaito eilutę nuosekliai, iš kairės į dešinę ir vienu metu skaito tik vieną simbolį. Taigi stygos „LinuxHint“ su skaityti taip:

'L "i" n "u" x "H" i "n" t' [iš kairės į dešinę]

Pradėkime nuo paprasto

Paprasčiausias regexo tipas būtų ieškoti ir atitikti eilutę „C“. Reguliarus jos reiškinys yra tik „C“. Gana trivialus. Norint tai padaryti naudojant „Python“, pirmiausia reikės importuoti re modulis reguliarioms išraiškoms.

>>> importuoti pakartotinai

Tada mes naudojame funkciją re.Paieška(raštas, virvelė) kur raštas yra reguliarioji mūsų išraiška ir stygos įvesties eilutėje, kurioje ieškome modelio.

>>> re.paieška („C“, „Šiame sakinyje yra apgalvotas„ C “)

Funkcija ima šabloną „C“, ieško jo įvesties eilutėje ir išspausdina vietą (span) kur randamas minėtas raštas. Ši eilutės dalis, ši eilutė yra tai, kas atitinka mūsų įprastą išraišką. Jei tokios atitikties nerasta, išvestis būtų a Nė vienas objektas.

Panašiai galite ieškoti šablono „reguliarioji išraiška“ taip:

>>> re.paieška („reguliarioji išraiška“, „Mes galime naudoti įprastus posakius ieškodami modelių.“)

re.ieškoti (), pakartoti.rungtynės () ir pakartotinai.visas atitikimas ()

Trys naudingos modulio funkcijos yra:

1.  re.Paieška(raštas, virvelė)

Tai grąžina poskyrį, kuris atitinka modelį, kaip matėme aukščiau. Jei atitikties nerandama Nė vienas yra grąžinamas. Jei nurodytą modelį atitinka keli poskyriai, pranešama tik apie pirmąjį atvejį.

2.  re.rungtynės (raštas, virvelė)

Ši funkcija bando suderinti pateiktą modelį nuo eilutės pradžios. Jei kur nors viduryje jis susiduria su pertrauka, jis grįžta Nė vienas.

Pavyzdžiui,

>>> re.rungtynės („Joh“, „John Doe“)

Kur eilutė „Mano vardas Jonas Doe“ nėra atitikmuo, taigi Nė vienas yra grąžinamas.

>>> spausdinti (per.rungtynės („Joh“, „Mano vardas John Doe“))
Nė vienas

3.  re.fullmatch (raštas, virvelė)

Tai yra griežtesnė nei abi pirmiau minėtos, ir bandoma rasti tikslią eilutės modelio atitiktį, kitaip numatytoji Nė vienas.

>>> spausdinti (per.„fullmatch“ („Joh“, „Joh“))

# Visa kita nebus rungtis

Aš naudosiu tik re.Paieška() funkcija likusioje šio straipsnio dalyje. Kai tik sakau, kad regexas priima šią eilutę, tai reiškia, kad athe re.Paieška() funkcija rado tinkamą įvesties eilutėje esančią eilutę ir ją grąžino vietoj Nė vienasobjektas.

Ypatingi personažai

Reguliarūs posakiai, tokie kaip „Jonas“ ir „C“, nėra labai naudingi. Mums reikia specialių simbolių, kuriuos įprasta reiškia reguliarių posakių kontekste. Štai keli pavyzdžiai:

    1. ^ - Tai atitinka eilutės pradžią. Pavyzdžiui, '^ C' atitiks visas eilutes, prasidedančias raide C.
    2. $ - tai atitinka eilutės pabaigą.
    3. . - Taškas reiškia vieną ar daugiau simbolių, išskyrus naują eilutę.
    4. * - Tai reiškia nulį ar daugiau ankstesnio simbolio. Taigi b * atitinka 0 ar daugiau b įvykių. ab * atitinka tik a, ab ir a
    5. + - Tai yra vienas ar keli ankstesnio veikėjo simboliai. Taigi b + atitinka 1 ar daugiau b įvykių. ab * atitinka tik a, ab ir a
    6. \ - atgalinis pasvirasis brūkšnys naudojamas kaip pabėgimo seka regexes. Taigi jūs norite, kad reguliarioji išraiška ieškotų pažodinio dolerio simbolio „$“, o ne eilutės pabaigos. Galite parašyti \ $ taisyklingąja išraiška.
    7. Garbanotomis petnešomis galima nurodyti pakartojimų skaičių, kurį norite pamatyti. Pavyzdžiui, šablonas, panašus į ab 10, reiškia eilutę a, po kurios eina 10 b, atitiks šį modelį. Taip pat galite nurodyti skaičių diapazoną, pvz., B 4,6 atitinka eilutes, kuriose b kartojasi 4–6 kartus iš eilės. 4 ar daugiau pasikartojimų šablonui reikia tik kablelio, pvz., B 4,
    8. Laužtiniai skliaustai ir simbolių diapazonas. RE, pavyzdžiui, [0–9], gali veikti kaip bet kurio skaitmens nuo 0 iki 9 vietos rezervavimo ženklas. Panašiai galite turėti skaitmenis nuo vieno iki penkių [1–5] arba sutapti su didžiosiomis raidėmis, naudodami [A-Z] arba bet kurią abėcėlės raidę, neatsižvelgdami į tai, ar ji naudojama didžiosiomis ar mažosiomis raidėmis [A-z].
      Pavyzdžiui, bet kuri eilutė, pagaminta iš tiksliai dešimties skaitmenų, atitinka įprastą išraišką [0–9] 10, labai naudinga, kai ieškote telefono numerių tam tikroje eilutėje.
    9. Galite sukurti OR panašų teiginį naudodami | simbolis, kai reguliarųjį išraišką sudaro du ar daugiau taisyklingų posakių, tarkime, A ir B. Regeksas A | B yra atitiktis, jei įvesties eilutė yra reguliariosios išraiškos A arba B atitiktis.
    10. Galite sugrupuoti įvairius regexes. Pvz., Regex (A | B) C atitiks AC ir

Apima daug daugiau dalykų, tačiau aš rekomenduočiau mokytis einant, o ne perkrauti smegenis daugybe neaiškių simbolių ir krašto atvejų. Jei kyla abejonių, „Python“ dokumentai yra didžiulė pagalba ir dabar jūs žinote pakankamai, kad galėtumėte lengvai sekti dokumentus.

Patirtis ir nuorodos

Jei norite pamatyti regimą regex interpretaciją, galite apsilankyti „Debuggex“. Ši svetainė realiuoju laiku sugeneruoja jūsų regex rodinį ir leidžia išbandyti jį pagal įvairias įvesties eilutes.

Norėdami sužinoti daugiau apie reguliariųjų išraiškų teorinį aspektą, galite perskaityti pirmuosius Michaelo Sipserio įvado į skaičiavimo teoriją skyrius. Jo labai lengva sekti ir parodo reguliarių posakių, kaip pagrindinės skaičiavimo sąvokos, svarbą!

Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...
„Vulkan“, skirta „Linux“ vartotojams
Kiekvienos naujos kartos grafikos plokštės matome, kaip žaidimų kūrėjai peržengia grafinės ištikimybės ribas ir artėja prie fotorealizmo. Nepaisant vi...
„OpenTTD“ ir „Simutrans“
Sukurti savo transporto modeliavimą gali būti smagu, atpalaiduojanti ir be galo viliojanti. Štai kodėl jūs turite įsitikinti, kad išbandėte kuo daugia...