IndexRegExGroup() doorzoekt de invoertekenreeks en geeft de startpositie van de n-de herhaling van het samengestelde reguliere expressiepatroon dat is opgegeven. Een optioneel vierde argument count levert de waarde van n, die 1 is als het argument wordt weggelaten. De nummering van de posities in de tekenreeks loopt van links naar rechts en begint bij 1. Als er geen overeenkomst wordt gevonden, retourneert de functie 0.
Deze functie voert regexbewerkingen uit die hoofdlettergevoelig zijn. U kunt eventueel ook de variant IndexRegExGroupI() gebruiken om hoofdletteronafhankelijke regexbewerkingen uit te voeren.
Syntaxis:
IndexRegExGroup
(text, regex, group [, count])
Retourgegevenstypen: geheel getal
Argumenten
Argument
Beschrijving
text
De tekst van de invoertekenreeks waarin u wilt zoeken naar een reguliere expressie.
regex
De reguliere expressie die moet worden gebruikt om de invoertekenreeks te doorzoeken.
group
Het nummer van de groep, in het geval van een samengestelde reguliere expressie.
Een group waarde van 0 retourneert de index van de volledige regex. Als de reguliere expressie echter alleen de index van de gehele overeenkomst moet retourneren, gebruikt u in plaats daarvan de functie IndexRegEx().
U kunt een negatieve group waarde opgeven om van rechts naar links naar overeenkomsten te zoeken.
count
Het nummer van de overeenkomst. Dit is handig als er meerdere overeenkomsten voor de reguliere expressie in de tekst kunnen worden gevonden. Geef bijvoorbeeld de waarde 4 op te zoeken naarde positie van de vierde overeenkomst.
Dit is een optioneel argument. De standaardinstelling is 1 als deze niet is opgegeven. U kunt een negatieve waarde opgeven om van rechts naar links naar overeenkomsten te zoeken.
Voorbeelden van functies
Voorbeeld
Resultaat
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
Retourneert 3 (startpositie van volledige regex).
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
Retourneert 3 (startpositie van de eerste groep).
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
Retourneert 4, dit is de startpositie van de tweede groep. In het regexpatroon van de invoer komt de tekenreeks ([0-9]+) overeen met de tweede groep.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Retourneert 0, omdat IndexRegExGroup() hoofdlettergevoelig is.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Retourneert 3. De hoofdletterongevoelige variant van de functie, IndexRegExI(), wordt gebruikt.
Wanneer gebruiken
Gebruiksscenario's voor deze functie zijn onder andere:
Identificeren waar specifieke tekstpatronen voorkomen binnen grotere stukken tekst. U wilt bijvoorbeeld weten waar het domein van een e-mailadres wordt gebruikt in een reeks lange e-mailberichten.
IndexRegExGroup() is vooral nuttig voor geavanceerde gegevensverwerking en wordt vaak gebruikt in de eerste stap van een langere, complexere transformatie. Het is meestal eenvoudiger om problemen op te lossen met andere regexfuncties zoals ExtractRegExGroup(), MatchRegEx(), en CountRegEx(), maar er kunnen momenten zijn waarop IndexRegExGroup() oplossingen biedt die deze functies niet kunnen bieden.
Voorbeeld 1 - load-script om posities van ISBN-componenten te vinden
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
Het aanmaken van een variabele, ISBN_RegEx om de reguliere expressie op te slaan die we willen gebruiken.
Een set ISBN-codes voor boeken die een boekwinkel bij verschillende leveranciers wil bestellen.
Voor elke ISBN-code moeten we de startpositie van elk van de volgende extraheren:
EAN
Groep
Registrant
Publicatie
Controlesom
Load-script
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD Supplier,
IndexRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
IndexRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
IndexRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
IndexRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
IndexRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
Supplier
EAN
Group
Registrant
Publication
Checksum
Resultatentabel
Supplier
EAN
Group
Registrant
Publication
Checksum
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
In dit geval bevat elk boek componenten op dezelfde posities.
Voorbeeld 2 - diagramuitdrukkingen om URL-posities te vinden (met vergelijking IndexRegEx() )
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
Een tabel met de naam Correspondence, die tekst van een e-mailbericht bevat in een veld met de naam EmailBody.
Inhoud van e-mailberichten die web-URL's bevatten.
We willen de positie van de tweede URL vinden, indien aanwezig, evenals de posities van de volgende componenten:
Domein
Pad
We willen één reguliere expressie gebruiken om alle bewerkingen uit te voeren.
Load-script
Correspondence:
Load * Inline `
ID EmailBody
1 Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2 Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3 Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!
` (delimiter is '\t');
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie:
IndexRegEx() retourneert de startpositie van de hele URL, terwijl IndexRegExGroup() startposities van de individuele delen van de URL retourneert, die overeenkomen met de group waarde die we hebben gebruikt. De record met een ID waarde van 2 bevat slechts één URL, dus worden er waarden van 0 geretourneerd.
Dezelfde reguliere expressie wordt in alle diagramuitdrukkingen gebruikt om verschillende stukjes informatie te retourneren. Een uitsplitsing van de groepen die in de reguliere expressie zijn gedefinieerd, is als volgt.
Als u problemen ervaart op deze pagina of de inhoud onjuist is – een typfout, een ontbrekende stap of een technische fout – laat het ons weten zodat we dit kunnen verbeteren!