Hurtigveiledning for vanlige uttrykk

For G Suite og Office 360 brukere, og for Python-utviklere

(Badi James) (20. mai 2020)

Språk er sjelden enkelt å jobbe med når man trekker ut innsikt. Selv oppgaven med å finne og telle hvor mange ganger et ord vises i en teksttekst, en oppgave som ved første øyekast virker som om den skal være enkel å gjøre med moderne tekstbehandlere og kodebiblioteker, kan komme raskt inn i komplikasjoner.

Ta eksemplet med å prøve å finne ut om himmelen er nevnt i en teksttekst. Den enkle tilnærmingen vil være å bare:

  • Ctrl + F “sky” (hvis du bruker en tekstredigerer eller tekstbehandler)
  • “sky” i body\_of\_text (hvis du skriver en script in python)

Imidlertid vil begge tilnærmingene ikke alltid finne omtale av himmelen, og vil noen ganger gi falske positive. Begrensningene med disse tilnærmingene kommer fra hvordan de søker etter den nøyaktige rekkefølgen av tegn s-k-y. Nedenfor er noen funksjoner i språket som vil føre til at denne tilnærmingen mislykkes:

  • Store bokstaver: Hvis en setning begynner med «Himmel» eller «Himmel» vises som en del av et substantiv (eller hvis forfatteren av teksten hadde en ødelagt Caps Lock-tast) disse utseendene på ordet vil ikke bli funnet.
  • Stavemåter med andre ord: Tilstedeværelsen av ord som “pe himmel ”,“ ri himmel ”osv. vil føre til «Himmelen» skal oppdages feilaktig.
  • Flertall: «Himmel» vil ikke bli oppdaget.

Mange tekstbehandlere og tekstredigerere har muligheter tilgjengelig i «Finn og Erstatt ”-funksjoner for å løse de to første av problemene ovenfor. Faktisk er vanligvis alternativer som «Ignorer sak» og «Match hele ordet» slått på som standard. Imidlertid vil spørsmålet om manglende alternative ordformer (flertall, tid, kjønn osv.) Eller alternative stavemåter (for eksempel de mange variantene av navnet Mohammad) fremdeles være tilstede.

Med Python kan du utvide søkefrasen i body\_of\_text kodelinjen ved å legge til betingelser for å dekke alle varianter av ordet og for å ekskludere falske positive samsvar. Men dette kan være vondt å gjøre og kan gjøre koden din for denne antatt enkle oppgaven lang og vanskelig å vedlikeholde.

Skriv inn Regular Expressions

Regular expression (eller regex for kort) er kraftige verktøy for å finne mønstre av tegn i tekst. Ideen er at i stedet for å gi koden eller tekstbehandleren en bestemt sekvens av tegn å finne, gir du det et mønster (et vanlig uttrykk) som beskriver reglene du vil bruke for å utvide eller begrense hvilke segmenter av teksten som samsvarer det gitte mønsteret.

Å spesifisere disse reglene oppnås ved å legge til spesialtegn i ditt vanlige uttrykk. Ta eksemplet ovenfor med “himmel”. Et vanlig uttrykk for «\ bsk (y | ies) \ b» vil matche både «himmel» og «himmel», men vil ikke matche «irriterende», «risikabelt» eller noe annet ord som inneholder s-k-y. La oss dele opp formålet med hvert av spesialtegnene vi har lagt til:

» \ b «som flankerer hver ende av uttrykket vårt, spesifiserer ordgrenser, dvs. hvitt mellomrom, tegnsetting, begynnelsen eller slutten av teksten osv. Dette er det som forhindrer regex fra å matche andre ord der “himmel” er en del av stavemåten (som “irriterende” eller “Skype”).

Parentesene oppretter en fangstgruppe. Dette brukes til å spesifisere hvilken del av regexen du vil bruke en bestemt regel på. Innenfor denne fangstgruppen har vi «|» (aka den vertikale linjen). Dette fungerer som en OR-operator, og spesifiserer at enten uttrykket til venstre («y») eller uttrykket til høyre («ies») kan utgjøre en del av en kamp. Dette gjør at vår regex kan matche både entall «himmel» og flertall «himmel».

For å løse problemet med store bokstaver, er dette vanligvis et ikke-problem som alternativet Ignorer sak i Finn funksjoner i de fleste tekstbehandlere og tekstredigerere kan også brukes når du søker med regex. Når du bruker Python regex-biblioteket re, th e IGNORECASE -flagget kan brukes når du søker via regex (mer om det senere). Uten dette alternativet eller dette flagget kan vi imidlertid matche «Himmel», «himmel», «Himmel» og «himmel» ved å øke vår regex som sådan: «\ b (S | s) k (y | ies) \ b»

Så som du ser, har vanlige uttrykk gjort vår søken etter himmelen mye mer fruktbar! Dette var imidlertid relativt enkelt eksempel på hva regex kan gjøre. Nedenfor er noen eksempler som demonstrerer kraften og allsidigheten til regulære uttrykk:

  • M (u | o) hamm? (E | a) (d | t) samsvarer med de fleste stavevarianter av Mohammad
  • (? Mountain) Bike matches Bike men ikke Mountain Bike
  • kaffe (?! dato) samsvarer kaffe men ikke kaffedato
  • (https: \ / \ /)? (www \.)? [a- z0–9] + \. [az] + (\. [az] +)? samsvarer med mange nettadresser
  • [a-zA-Z0–9 -\_.] + @ [a-zA-Z] + \. [a-zA-Z] + ( \. [a-zA-Z] +)? samsvarer med mange e-postadresser

regexr.com: Et flott nettsted for læring av Regex

Eksemplene beskrevet tidligere kan ha fått deg til å tenke «det ser nyttig ut, men hvordan skal jeg huske alle de forskjellige spesialene tegn og hva de gjør? Og hvordan kan jeg fortelle om det vanlige uttrykket mitt fungerer som forutsatt? ”. Ikke bekymre deg, regexr.com er her for å hjelpe.

På dette nettstedet kan du lage vanlige uttrykk ved hjelp av de medfølgende juksearkene. som guider, og lim inn litt tekst for å teste dem ut. Eventuelle treff blir uthevet i teksten, og antall kamper vises. Regexen din er fargekodet og praktiske verktøytips beskriver hva hver karakter gjør når du holder musen over dem. Dette er flott for å lære regex ved å bruke regex.

Bruk av Regex i Google Docs og Google Sheets

Å bruke Regex i disse G Suite-appene er grei og brukervennlig. Bare trykk på Ctrl + F, og klikk deretter på de tre vertikale punktene i søkeboksen som vises øverst til venstre i nettleseren. Alternativt kan du navigere til Rediger -> Finn og erstatt i rullegardinmenyene. Dette åpner vinduet Finn og erstatt. Her finner du avkrysningsruten Match ved bruk av regulære uttrykk (Dokumenter) eller Søk ved bruk av vanlige uttrykk (Ark). Når du har valgt det, kan du lime inn det vanlige uttrykket i Finn -feltet. Eventuelle treff blir uthevet i dokumentet ditt, og et antall treff vises i Finn -feltet. Du kan fortsatt bruke de andre alternativene Finn og erstatt som er tilgjengelige, for eksempel Match case, og regexen din vil oppføre seg tilsvarende.

Bruk av «Regex» (jokertegn) i MS Word og Excel

Vanlige uttrykk støttes dessverre ikke i Word og Excel. Imidlertid tillater de «jokertegn», som oppfører seg på samme måte, selv om symbolene som brukes noen ganger er forskjellige.

I Word kan du søke med jokertegn ved å bruke funksjonen Avansert søk og erstatt. Detaljer om hvordan du navigerer til denne funksjonen, hvordan du aktiverer jokertegn og hva hvert jokertegn gjør, finner du i denne veiledningen på Office-støttenettstedet.

I Excel er det ikke umiddelbart åpenbart hvordan du søker med jokertegn, da det ikke er en del av noen søkefunksjon. Du kan imidlertid finne celler som samsvarer med søkeuttrykket ditt som inneholder jokertegn, ved å filtrere arkene dine ved hjelp av avanserte filtre. Følg denne veiledningen fra Office-støttenettstedet, der du kan finne ut hvordan du bruker jokertegn som en del av de avanserte filtrene dine under «Jokertegnekriterier».

Hvor får du tilgang til avanserte filtre i Excel, som tillater bruk av jokertegn

Bruk av regex i Python

re biblioteket leveres som en del av grunnleggende Python-installasjon. Dette biblioteket har mange funksjoner som lar deg analysere og manipulere strenger ved hjelp av regulære uttrykk.

Noen få nøkkelfunksjoner er:

  • re.search ( mønster, streng, flagg = 0 ) : Dette ser etter den første plasseringen i streng der mønster (ditt vanlige uttrykk) samsvarer, og returnerer et matchobjekt beskriver kampen, eller Ingen hvis ingen samsvar ble funnet.
  • re.match ( mønster , string, flags = 0 ) : Oppfører seg som re.search (), bortsett fra at det bare ser etter treff som begynner i begynnelsen av streng
  • re.split ( mønster, streng, flagg = 0 ): Deler streng i en liste etter treff til mønster , som metoden str.split (), men med regeks.
  • re.sub ( mønster, repl, string, count = 0, flags = 0 ): Erstatt forekomster av mønster i streng med repl, hvis repl er en streng, eller med utdata repl hvis repl er en funksjon som tar et enkelt matchobjekt som argument

Parameteren flags tillater du skal spesifisere flagg som re.IGNORECASE som endrer oppførselen til regex-mønstrene dine i samsvar med dette.

Når du skriver dine regex-mønstre som strenger i python, er det nyttig å bruke rå strenger, da disse lar deg bruke spesialtegn som «\» uten å måtte unnslippe dem. For eksempel i stedet for:

  • mønster = “\\ bsk (y | ies) \\ b”

Bruk:

  • mønster = r ”\ bsk (y | ies) \ b”
Et eksempel fra re-dokumentasjonen som viser bruken av regex med positivt blikk bak

Full dokumentasjon for re bibliotek finner du her: https://docs.python.org/3/library/re.html # module-re

Happy Matching !!

Som du kan se, kan vanlige uttrykk gjøre så mange oppgaver mye lettere når du arbeider med tekst. Selv å lære bare noen få spesialtegn kan tillate så mange nye bruksområder for Finn og erstatt verktøy. Mange tekstbehandlere og tekstredigerere har anerkjent sin nytte og har tillatt støtte for regulære uttrykk, eller har implementert sine egne funksjoner for å gi lignende funksjonalitet. Kjennskap til regulære uttrykk er et praktisk verktøy i verktøysettet for enhver forfatter, programvareutvikler eller alle som ofte analyserer tekst.

AI Palette hjelper FMCG-selskapene med deres produktinnovasjon. Vi bruker kunstig intelligens & Machine Learning for å hjelpe FMCG-selskaper med å skape forbrukervinnende produkter.