Fra rot til RegEx

09.06.2022
Aksel Bauge
Image 15

Det er nok flere enn meg som har jobbet med en RPA-prosess, og knotet med å hente ut informasjon fra en lengre tekst, f.eks en epost eller et skjema. I mitt tilfelle var tekststrengen et resultat av et innsendt skjema, og inneholdt informasjon som navn, fødselsnummer og poststed.

Etter å ha gjort en haug med ulike funksjoner som "Replace", "Split Lines" og "InString" klarte jeg til slutt å få informasjonen jeg ønsket på rett format, men jeg kunne ikke forstå at det ikke kunne gjøres på en enklere måte. Jeg rådførte meg med en mer erfaren kollega om problemet, og fikk til svar "prøvde du å løse det med RegEx?". Etter det så jeg meg aldri tilbake. En liten snutt med kode identifiserte alle elementene jeg ville ha, i et steg.

Hva er RegEx og hvorfor er det nyttig?

En Regular Expression (RegEx) er et kraftig verktøy som søker etter spesifikke kriterier i en tekststreng, men hva betyr det i praksis? Jo, RegEx kan bli brukt til å matche, lokalisere og administrere tekst, og det kreves relativt lite kode for å utføre operasjonene. Koden selv består av en sekvens av karakterer som spesifiserer et søkemønster i en tekst. Søkemønsteret blir brukt i en tekst-søkende algoritme for å utføre selve handlingen på teksten. Under har jeg listet diverse handlinger som jeg ofte bruker når jeg utvikler RPA-prosesser:

  • Identifisere spesifikke elementer i en tekst eller tabell.
    Eksempel: Ønsker å identifisere ordrenummer i teksten "Din ordre er registrert. Ordrenummer: 46328. Mvh Zalando"
    Vi kan legge til flere restriksjoner i samme uttrykk, f.eks at vi skal se etter en rekke med tall som kommer etter teksten «Ordrenummer:». Og kanskje vil vi legge til at vi bare skal se etter en tallrekke bestående av fem tall.
  • Validere at en tekst er oppgitt i rett format.
  • Kontrollere at kontonummer (bankkonto) er oppgitt med punktum på rett plass.
  • Erstatte og/eller plassere tekst i ønskede posisjoner i en tekststreng eller tabell.
    Eksempel: Erstatte alle landskoder på telefonnummer i en tabell, med ingenting.
  • Splitte tekst basert på en "match" for å lage lister, matriser, etc...

På bilde under er et eksempel på hvordan jeg kan indentifisere postnumrene i en tekststreng.

Regex1

I BluePrism bruker jeg et objekt vi i Avo har laget, og som er tilgjengelig på Blue Prism Digital Exchange; Avo.Regex. Man kan også bruke RegEx-mønster i Application Modeller i matching av attributter for å identifisere elementer i en applikasjon.

Potensielle fallgruver

Men som med enhver løsning, kommer det også noen fallgruver du må være bevist på når du velger å benytte RegEx i robotløsningen. RegEx fungerer akkurat som en robot, den utfører akkurat den handlingen du programmerer den til å gjøre, ergo, tekst kan bli tolket feil dersom løsningen ikke er laget robust, og testet godt nok. Dersom man leter etter svaret ja, vil det også kunne matche navnet Jan, hvis uttrykket ikke er spesifisert godt nok.

Reg1
Reg2
Venstre: Eksempel på uttrykk som kun ser etter "Ja". Høyre: Eksempel på uttrykk som ser etter "Ja" kun etter "abonnement: ".

Det kan også være vanskelig å forstå hva andre har gjort når man leser deres RegEx. Bruk et minutt ekstra på å dokumentere hva som skjer.

Til slutt vil jeg avslutte med et legendarisk sitat

Gud skapte kanskje jorden, men RegEx løste problemene
Aksel Bauge, 2022

Nyttige lenker for å lære mer om Regex