Hvad er RegEx
RegEx (kort for Regular Expressions) er en kort kodesekvens (tegn), der definerer et søgemønster. Søgemønstret bruges til at lede efter bestemte data i fx en mail.
Fig. 1.1 viser en online RegEx-tester. Jeg har indsat teksten (strengen) fra en faktura. Lige ovenover finder du udtryks-editoren. Skærmhjælpen er til højre og er meget værdifuld, når du lærer RegEx.

Mit RegEx-mønster til denne opgave ser sådan ud:
(?<=Invoice Number ).*
Mønstret udtrækker alt efter "Invoice Number " og giver mig fakturanummeret: "2021-001" (markeret med blåt).
RegEx i UiPath
RegEx-dataudtræk i UiPath er nemt. Udtrækket kan laves med den indbyggede activity (Matches) eller direkte med VB.NET-kode.
Brug Matches-activityen
Læs din tekst ind i en variabel af typen String. Her (Fig. 1.2) kommer mine data fx fra PDF'en "Invoice".
Når du har trukket "Matches" ind fra Activities, så sørg for, at den er lyseblå (klik på den, hvis ikke).

Udfyld følgende under Properties:
Input:
Her bruger jeg strengen fra 'Read PDF Text'-activityen.
Pattern:
Brug et RegEx-mønster. For at få fakturanummeret kan vi bruge:
(?<=Invoice Number ).*
Result:
Klik med musen i Result (under Misc), og tryk derefter Ctrl+K; det opretter en ny variabel af typen IEnumerable of Matches. Giv den et navn, før du gør andet. Jeg kalder min ienMatches (men kald den, hvad du vil). Du kan se en IEnumerable som en liste med 0 eller flere elementer. Her indeholder den vores matches, hvis der er nogen.
Træk en Write Line ind, og skriv output-variablen fra Matches-activityen. Fordi det er en IEnumerable, altså en liste/samling, angiver vi 0 i parentes bagefter for at få det første match. I en "rigtig" robot skriver vi resultatet til et Excel-ark, en database eller et system, men en Write Line er perfekt til test og læring.
Prøv at køre dit workflow. I Output har du nu dit fakturanummer (se Fig. 1.3).

Brug en Assign
De indbyggede activities 'Matches' og 'Is Match' er ofte nyttige. Men der findes en langt enklere løsning (i hvert fald i mange tilfælde) til at udtrække data fra tekst med RegEx i UiPath.
Tag følgende tekst: "Amount due $2,000.00, please pay before 04/24/2020", hvor formatet altid er det samme, men beløbet ændrer sig. Vi vil udtrække og gemme beløbet i en streng, altså "2,000.00".

Opret variabler
Opret først de to variabler i variabel-manageren:
- 'strInput', en streng hvor vi gemmer vores input
- 'strOutut', en streng til værdien af det udtrukne beløb
Brug RegEx til at give output-strengen en værdi
Træk en 'Assign'-activity ind (Fig. 2.2), sæt venstre side til 'strInput' og højre side til:
System.Text.RegularExpressions.Regex.Match(strInput, "(?<=\$)(\d+,?)+(\.\d+)").Value

Lad os dykke ned i udtrykket på højre side:
- System.Text.RegularExpressions er Microsoft .NET-namespacet
- Regex.Match er metoden (beskrevet her: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.match?view=netframework-4.8)
- strInput er strengen, vi søger i
- “(?<=\$)(\d+,?)+(.\d+)” er RegEx-mønstret, vi bruger til at udtrække beløbet
- (?<=\$) er et positivt lookbehind, hvor vi angiver, at vi vil kigge bag et '$'
- (\d+,?) derefter leder vi efter et eller flere cifre (\d+) og nul eller én tusindtalsseparator
- + en eller flere af de foregående mønstre (ellers ville det stoppe efter '2,')
- (\.\d+) en decimalseparator (\.) og et eller flere cifre (\d+)
Skriv outputtet ud
Træk nu bare en 'Write Line' ind, og sæt værdien til vores output-variabel, 'strOutput' (Fig. 2.3).

Og så er vi færdige (Fig. 2.4). Workflowet virker også med alle andre værdier.
