Spring til indhold
Menu

Artikler

Sådan udtrækker du data med RegEx i UiPath

RegEx er en tegnsekvens, der definerer et søgemønster. Som UiPath RPA-udvikler bruger vi RegEx til at udtrække data fra fx mails og fakturaer. Sådan gør du.

Anders Jensen Automatiserings- og AI-instruktør

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.

Test

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).

Fig. 1.2: Matches-activityen i UiPath

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).

Fig. 1.3: Output fra vores RegEx/Matches-workflow

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".

Fig. 2.1: Hele workflowet, der udtrækker beløbet fra input-strengen

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
Fig. 2.2: En Assign til vores RegEx

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).

Fig. 2.3: Skriv outputtet ud

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

Fig. 2.4: Vores udtrukne værdi

Mere RegEx-materiale

Kommentarer (10)

  1. Sonali

    hej, jeg vil adskille s.nr. og titel fra kolonne 1 i Excel. Hvordan gør jeg det???

    Maskinoversat fra engelsk · Vis original

    hi i want to seprate s.no and title from column 1 in excel how to do it???

  2. Anders Jensen Forfatter

    Hej Sonali. Kan du være mere specifik? Eller bare stille dit spørgsmål med et screenshot på min Discord: https://andersjensen.org/#community Venlig hilsen Anders

    Maskinoversat fra engelsk · Vis original

    Hey Sonali. Can you be more specific? Or just post your question (with screenshot) on my Discord: https://andersjensen.org/#community Kind regards, Anders

  3. Jyothi

    Hej. Kan du vise mig, hvordan man automatiserer captcha med Regex?

    Maskinoversat fra engelsk · Vis original

    Hi Can you show me how to automate captcha using Regex

  4. Sharan

    Jeg skal udtrække et afsnit fra en mail, hvor indholdet kan være forskelligt hver gang, men underoverskriften er den samme. F.eks.: Description - This is an example. Når vi bruger regex-kommandoen, gemmes outputtet som IEnumerable, men jeg vil have det som enten en string eller en Integer. Kan du hjælpe mig med det?

    Maskinoversat fra engelsk · Vis original

    I need to extract a paragraph from a mail which can have different context every time, but the sub-heading will be the same. e.x: Description - This is an example. When we use the regex command the output is stored as Ienumerable but I want to be either a string or an Integer. Can you help me on this

  5. Ranjit

    Hej, Jeg vil gerne formatere string-outputtet som nedenfor. Foreslå gerne den bedste metode. input="abcdefgh" output skal være= ab c de f gh

    Maskinoversat fra engelsk · Vis original

    Hi, I want to make the string output like below, please suggest the best way. input="abcdefgh" output I should get= ab c de f gh

    1. Anders Jensen Forfatter

      Tak, fordi du skriver. Jeg får mere end 50 beskeder om dagen. Selvom jeg læser dem alle, kan jeg ikke svare alle. Men jeg har oprettet et RPA/Automation-community, hvor vi er mere end 4.900 RPA Developers, som hjælper hinanden med løsninger og karriere. Her er videoen om, hvordan du bliver medlem. Invitationslinket står i videobeskrivelsen: https://youtu.be/xWFz-S96XGo Venlig hilsen Anders

      Maskinoversat fra engelsk · Vis original

      Thanks for writing I'm getting more than 50 messages daily. While I read all of them, I can’t reply to everyone But I’ve created an RPA/Automation community where we’re 4900+ RPA Developers helping each other with solutions and our careers. Here’s the video on how to join (the invitation link is in the video description): https://youtu.be/xWFz-S96XGo Kind regards, Anders

  6. J Jacob

    Hvordan udtrækker man et bestemt tal fra en string med tegn? f.eks. 413-62416-WF | Bac ID: 4432672 Fra ovenstående string vil jeg udtrække Bac ID'et, som i dette tilfælde er 4432672. Stringen har altid det samme format med "-", "|" og ":", men længden på de enkelte tal kan variere.

    Maskinoversat fra engelsk · Vis original

    How to extract a particular number from a string of characters e.g. 413-62416-WF | Bac ID: 4432672 From the above string I want to extract the bac ID which is in this case 4432672, the string is always in the same format with "-", "|" & ":", but the lengths of each numbers can varry.

    1. Anders Jensen Forfatter

      Hej J Jacob. Beklager det sene svar. Ja, du kan bruge dette RegEx: (? Jeg håber, det hjalp Venlig hilsen Anders

      Maskinoversat fra engelsk · Vis original

      Hey J Jacob. Sorry about the late reply. Yes, you can use this RegEx: (? I hope it helped Kind regards, Anders

  7. Shantanu Chande

    Hej Anders, Fin tutorial, og den er virkelig nyttig. Må jeg linke til denne tutorial i mit indlæg på Medium?

    Maskinoversat fra engelsk · Vis original

    Hello Anders, Nice tutorial and this is really useful. If you permit, can I add the link of this tutorial if my post on medium.

    1. Anders Jensen Forfatter

      Hej Shantanu, tusind tak, fordi du spørger. Selvfølgelig må du det

      Maskinoversat fra engelsk · Vis original

      Hey Shantanu, thanks a ton for asking and of course

Skriv en kommentar

Dit navn og din kommentar vises offentligt efter godkendelse. Din e-mail vises ikke. Læs mere i privatlivspolitikken. Efter godkendelse kan kommentaren maskinoversættes til den anden sprogversion. Du kan altid se originalen.

Flere artikler

  • UiPath Orchestrator - komplet guide [2021]

    Komplet guide til UiPath Orchestrator: forbind din robot, publicér pakker, opret processer, kør jobs, planlæg triggers og håndtér queues og assets.

    Læs mere →
  • Sådan skriver du i applikationer og web med UiPath (Type Into)

    Lær alt om Type Into-activityen i UiPath: simulér tastetryk, send window messages, håndtér specialtaster og vælg den rigtige input-metode.

    Læs mere →
  • UiPath - Excel vs Workbook activities

    Når du arbejder med Excel i UiPath, kan du bruge Excel- eller Workbook-activities. Her er fordele og ulemper, så du kan vælge den rigtige til din robot.

    Læs mere →