IndexRegEx() doorzoekt de invoertekenreeks en geeft de startpositie van de n-de herhaling van het gespecificeerde reguliere expressiepatroon. Een optioneel derde 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 IndexRegExI() gebruiken om hoofdletteronafhankelijke regexbewerkingen uit te voeren.
Syntaxis:
IndexRegEx
(text, regex [, 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.
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 om de positie van de vierde overeenkomst te extraheren.
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
IndexRegEx('abc123','[a-z][0-9]+')
Retourneert 3 (de startpositie van de eerste overeenkomst).
IndexRegEx('abc123','[a-z][0-9]+',2)
Retourneert 0 (regex heeft geen tweede overeenkomst).
IndexRegEx('ABC123','[a-z][0-9]+')
Retourneert 0, omdat IndexRegEx() hoofdlettergevoelig is.
IndexRegExI('ABC123','[a-z][0-9]+')
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 een e-mailadrespatroon wordt gebruikt in een reeks lange e-mailberichten.
IndexRegEx() 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 ExtractRegEx(), MatchRegEx(), en CountRegEx(), maar er kunnen momenten zijn waarop IndexRegEx() oplossingen biedt die deze functies niet kunnen bieden.
Voorbeeld 1 - load-script om boeken op basis van ISBN te identificeren
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 ISBN bevat de tekst van een e-mailbericht in een veld met de naam EmailBody.
We willen de posities van alle 13-cijferige ISBN-codes uit de natuurlijke taal in het e-mailbericht vinden.
Load-script
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD IndexRegEx(EmailText,'$(ISBN_RegEx)',1) AS ISBNCode1,
IndexRegEx(EmailText,'$(ISBN_RegEx)',2) AS ISBNCode2,
IndexRegEx(EmailText,'$(ISBN_RegEx)',3) AS ISBNCode3,
* INLINE `
EmailText
Hi there! I have some books that I'm interested in ordering from your distribution center. Just wanted to make sure they were in stock before I put the order in on the system - do you think you could tell me whether you have these in stock, and how many you might be able to ship us? Thanks! Item 1: ISBN 123-3-1234-1234-0. This is one I've had a really hard time getting a hold of lately. Do you think you would have 5 in stock? If not, can I put a hold on the next 5 you get? Item 2: ISBN 012-2-0123-0123-4 ... This one is not high-priority, but if you have one, I'll take it! Item 3: ISBN 000-1-0123-0123-2. Customers have been requesting this one for a long time, and we haven't had it in stock for years due to it being out of print. Any chance you might have 7 of them? Thanks!
` (delimiter is '/t/';
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
ISBNCode1
ISBNCode2
ISBNCode3
Resultatentabel
ISBNCode1
ISBNCode2
ISBNCode3
301
487
588
Voorbeeld 2 - diagramuitdrukking om contactpersonen met secundaire telefoonnummers te identificeren
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 BusinessContactInfo, die informatie over bedrijven bevat die gevonden werd op de website van elk bedrijf.
ContactInfo is een veld dat telefoonnummers van bedrijven bevat. We willen bepalen welke bedrijven meerdere telefoonnummers beschikbaar hebben.
Onze vereisten:
Telefoonnummers moeten NANP-telefoonnummers met 10 cijfers zijn.
We willen toestaan dat het netnummer tussen haakjes staat.
We willen een enkele spatie of koppelteken toestaan tussen elk segment van een telefoonnummer.
Load-script
BusinessContactInfo:
Load * Inline `
ID CompanyName ContactInfo
1 Company A (123) 456-7890 (023) 123-4567
2 Company B 0123456790 1357913579 0246802468
3 Company C 234-567-8901
` (delimiter is '\t');
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie:
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!