Hoe extraheer ik informatie uit mijn document met REGEX?
Praktische voorbeelden
In het huidige artikel laten we zien hoe u gegevens uit het document kunt extraheren dankzij reguliere expressies met meerdere elementen in PaperOffice en deze automatisch kunt opslaan als trefwoord voor het document.
We hebben hieronder een voorbeelddocument gemaakt met een specifieke datum. Dit document is een factuur. Het datumpatroon in ons document heeft de volgende notatie:
Extract information automatically from invoices
Maand, samengesteld uit letters, maar de eerste letter is altijd een hoofdletter, gevolgd door een spatie, dan de dag gevolgd door een komma, nog een spatie en dan het jaar.
Bijvoorbeeld: 20 september 2019 of 5 maart 2022
Om deze datum te extraheren kunnen we de volgende reguliere expressie (REGEX) gebruiken:
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d {2 })
Laten we de uitdrukking opsplitsen in individuele groepen. Deze groepen worden gescheiden door enkele haakjes ().
In de eerste groep zoeken we naar de 3-maandsletters: ([A-Z][a-z]{2})
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s (20 \d{2})
Maan uittrekken
- [A-Z] Deze string betekent dat we zoeken naar een hoofdletter van A-Z. Bijvoorbeeld de letter "S" uit sept. Houd er rekening mee dat hoofdletters en kleine letters afzonderlijk worden behandeld.
- [a-z]{2} Deze tekenreeks betekent dat we zoeken naar twee kleine letters van a-z. Dat zou ep zijn van "Sep".
Dan zoeken we naar een spatie met de volgende string: \s
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s (20 \d{2})
Uittrekdatum
Zoek in de tweede groep de aanduiding van de dag in cijfers: (0[1-9]|[12][0-9]|3[01])
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s (20 \d{2})
De dag moet worden gescheiden door drie verschillende uitspraken.
Omdat we niet weten welke datum in het document kan voorkomen, kan dit de eerste dag (01) of de laatste dag (31) van de maand zijn, zodat u moeten dienovereenkomstig verschillende opties worden genoemd.
Deze worden gescheiden door het teken "|".
Voorbeeld: (1|2|3) = 1 of 2 of 3.
Er volgt een lijst met toegestane tekens tussen vierkante haken. Meerdere vierkante haken komen overeen met meerdere tekens.
Als een uitdrukking meerdere karakters moet beschrijven, worden deze eenvoudigweg achter elkaar toegevoegd. Vervolgens wordt de invoer van links naar rechts vergeleken met uw uitdrukking.
Natuurlijk hoeven niet alle nummers vermeld te worden. Over het geheel genomen staat de volledige uitdrukking tussen haakjes echter voor slechts één teken.
-
0[1-9] Deze tekenreeks betekent dat het getal kan beginnen met een "0", gevolgd door een getal van 1 tot en met 9. We krijgen dus elk getal van 01 - 09.
De string zoekt naar een getallenpatroon dat begint met een nul. Als uw document normaal gesproken de datum "5 maart 2022" heeft, dus zonder het cijfer "0" vóór het cijfer "5", wordt de "0" in de tekenreeks weggelaten.
-
[12][0-9] Deze tekenreeks betekent dat het getal kan beginnen met een "1" of een "2", gevolgd door een willekeurig getal van 0 tot en met 9. Het resultaat kan een willekeurig getal zijn nummer van 10 - 29 komt uit.
-
3[01] Deze tekenreeks betekent dat een getal kan beginnen met een "3", gevolgd door een "0" of een "1". Het resultaat kan 30 of 31 zijn.
Nadat de opties voor de dag zijn gedefinieerd, moet de uitdrukking voor het jaar worden bepaald.
Nu zoeken we naar de komma en de spatie: ,\s
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s (20 \d{2})
Jaar uittrekken
In de laatste groep zoeken we naar het jaartal: (20\d{2})
([A-Z][a-z]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d {2 })
We gaan op zoek naar een willekeurig jaar, maar weten dat het ≥ 2000 zal zijn.
- 20 Deze tekenreeks betekent dat we zoeken naar een jaar dat begint met precies 20.
- \d{2} Deze tekenreeks betekent dat we zoeken naar een mogelijk getal van twee cijfers, d.w.z. van "00" tot "99".
Het teken \d komt bijvoorbeeld overeen met een cijfer tussen 0 en 9, terwijl het teken \d{2} overeenkomt met een getal van twee cijfers.
Variables are read from the document and made available
Als de reguliere expressie nu in PaperOffice wordt gebruikt, is het eindresultaat de datum "20 september 2019".
Op deze manier kan elke datum uit een document worden gelezen zonder dat we de oorspronkelijke waarde kennen. Deze groepen kunnen ook ergens anders worden gebruikt en vrij worden verplaatst om andere datumformaten te lezen.
Hier is nog een voorbeeld:
Invoices with different formats can be easily read
De datum begint met de dag, gevolgd door de maand, bestaande uit letters, maar de eerste letter is altijd een hoofdletter, gevolgd door een punt, nog een spatie en dan het jaar.
Om deze datum te extraheren kan de zojuist beschreven reguliere expressie (REGEX) worden gebruikt, met een extra aanvulling, omdat in het tweede voorbeeld de "punt" na de maand wordt gegeven.
Dit kan worden opgegeven met de volgende tekenreeks: \.
De volledige expressie ziet er dus als volgt uit:
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2})\.\s(20\d{2 })
U kunt uw gemaakte regex altijd valideren door naar de pagina https://regex101.com te gaan om deze samen met uw invoegtekst. Regex101 controleert niet alleen of uw regex correct is, maar legt u ook het grootste deel van de reguliere expressie uit.
En dus kun je de verschillende tekensets voor alles gebruiken.