Hvorfor alle i humaniora bør lære seg regex
Jeg har i i det siste begynt å se på hvordan regular expressions (forkortes regex), på norsk regulære uttrykk, kan brukes til å gjøre en del oppgaver som har med tekstbehandling å gjøre… vel…enklere. Og når jeg skriver enklere er det altså med et lite forbehold om at det er en viss læringskurve i spill her. Det er greit å begynne på nettsteder som regex101, regexplained og videoen til Lea Verou og den tilhørende nettsiden. Men hvorfor er det verdt å sette av litt tid til å lære seg regex? La meg komme med et eksempel fra den virkelige verden.
En stipendiatkollega som jobber som redaksjonsassistent for et sentralt fagtidskrift fortalte meg at han hadde fått en oppgave om å alfabetisere en forfatterliste basert på etternavn. Vanligvis kan man alfabetisere linjer (eller avsnitt) basert på første bokstav på den linjen. I Word gjør man for eksempel dette under Table → Sort. Problemet er at denne listen var formatert med fornavnet først og ikke etternavnet, på denne måten[1]:
Jonathan Z. Smith, Prof., Chicago Divinity Russel McCutcheon, Prof., University of Alabama Michael Pye, Prof. em., University of Marburg Knut Melvær, MA, University of Bergen
Det finnes flere måter å løse dette på i regex, men jeg lokaliserte etternavnet med denne syntaksen:
Slik ser den ut på regex101.com:
Det regulære utrykket leter altså etter ett tomrom (\s), 1 til uendelig av «ordkarakterer» (\w+), et komma (,) og ett tomrom (\s). Dette skal den gjøre på (/) alle linjer (m) og rapportere alle treff (g). Skal vi være skikkelig avanserte kan vi prøve å beskrive hele strengen og gruppere treffene. Dette blir nyttig om du vil manipulere teksten eller lignende. Sjekk eksemplet mitt her.
Nå som vi har klart å lokalisere etternavnet i teksten, så er neste steg å sortere basert på det. Det første vi trenger er en tekstbehandler som kan sortere linjer basert på regulære uttrykk. Jeg hadde allerede BBedit[2] liggende på harddisken. Etter man har limt inn teksten[3] inn i et BBedit/TextWrangler dokument, klikker man i menylinjen på Text → Sort lines…. Da får man opp et vindu ser som slik ut:
Legg merke til at BBedit/TextWrangler ikke nevner «regex», men oppgir søk på «pattern». Man skal være oppmerksom på at det finnes flere termer for den samme funksjonaliteten og at forskjellige tekstbehandlere av og til oppfører seg litt annerledes. Det må av og til prøves og feiles litt. De som er ekstra oppmerksomme ser også at man kan sortere på såkalte sub-patterns, det er det samme som jeg bruker til å stokke om på teksten i dette eksemplet.
Klikker man Sort ender man opp med listen slik:
Russel McCutcheon, Prof., University of Alabama Knut Melvær, MA, University of Bergen Michael Pye, Prof. em., University of Marburg Jonathan Z. Smith, Prof., Chicago Divinity School
Du tenker kanskje at dette virker som litt mye arbeid for å sortere fire linjer, men man havner fort i en situasjon der man er nødt til å sortere eller omstokke på for eksempel et tyvetalls navn. Da blir denne metoden veldig hendig og tidsbesparende.
Navnelisten under er konstruert av meg ↩
TextWrangler er gratisversjonen av BBedit og holder lenge for de fleste ↩
NB! BBedit/TextWrangler tar bare rentekst ↩