IndexRegExGroup() durchsucht den Eingabestring und gibt die Anfangsposition des n-ten Vorkommens des Musters für den angegebenen zusammengesetzten regulären Ausdruck zurück. Ein optionales viertes Argument count liefert den Wert von n. Erfolgt keine Eingabe, wird 1 verwendet. Die Positionen im String werden von links nach rechts beginnend mit 1 aufsteigend nummeriert. Wenn keine Übereinstimmung gefunden wird, gibt die Funktion 0 zurück.
Diese Funktion führt Regex-Vorgänge durch, bei denen die Groß- und Kleinschreibung beachtet wird. Sie können alternativ die Variante IndexRegExGroupI() verwenden, um Regex-Vorgänge ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen.
Syntax:
IndexRegExGroup
(text, regex, group [, count])
Rückgabe Datentyp: ganze Zahl
Argumente
Argument
Beschreibung
text
Der Text des Eingabestrings, in dem Sie nach einem regulären Ausdruck suchen möchten.
regex
Der reguläre Ausdruck, der für die Suche im Eingabestring verwendet werden soll.
group
Die Nummer der Gruppe, im Fall eines zusammengesetzten regulären Ausdrucks.
Ein Wert für group von 0 gibt den Index des gesamten Regex zurück. Wenn der reguläre Ausdruck jedoch nur den Index der gesamten Übereinstimmung zurückgeben muss, verwenden Sie stattdessen die Funktion IndexRegEx().
Sie können einen negativen Wert für group angeben, um nach Übereinstimmungen von rechts nach links zu suchen.
count
Die Nummer der Übereinstimmung. Dies ist nützlich, wenn im Text mehrere Übereinstimmungen mit dem regulären Ausdruck gefunden werden können. Geben Sie zum Beispiel den Wert 4 an, um nach der Position der vierten Übereinstimmung zu suchen.
Dies ist ein optionales Argument. Standardwert ist 1, wenn nicht angegeben. Sie können einen negativen Wert angeben, um nach Übereinstimmungen von rechts nach links zu suchen.
Funktionsbeispiele
Beispiel
Ergebnis
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
Gibt 3 zurück (die Startposition des vollständigen Regex).
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
Gibt 3 zurück (die Startposition der ersten Gruppe).
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
Gibt 4 zurück (die Startposition der zweiten Gruppe). In dem Regex-Muster der Eingabe entspricht der String ([0-9]+) der zweiten Gruppe.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Gibt 0 zurück, da IndexRegExGroup() zwischen Groß- und Kleinschreibung unterscheidet.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Gibt 3 zurück. Die Variante IndexRegExI() der Funktion ohne Berücksichtigung von Groß- und Kleinschreibung wird verwendet.
Verwendung
Zu den Anwendungsfällen für diese Funktion gehören:
Erkennen, wo bestimmte Textmuster in größeren Textmengen vorkommen. Sie könnten zum Beispiel wissen wollen, wo die Domäne einer E-Mail-Adresse in einer Reihe von langen E-Mail-Nachrichten verwendet wird.
IndexRegExGroup() ist besonders nützlich für die fortgeschrittene Datenverarbeitung und wird in der Regel im ersten Schritt einer längeren, komplexeren Umwandlung verwendet. Normalerweise ist es einfacher, Probleme mit anderen Regex-Funktionen wie ExtractRegExGroup(), MatchRegEx() und CountRegEx() zu lösen, aber es kann vorkommen, dass IndexRegExGroup() Lösungen bietet, die diese Funktionen nicht bieten können.
Beispiel 1 – Ladeskript zur Ermittlung der Positionen von ISBN-Komponenten
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript umfasst:
Die Erstellung einer Variablen (ISBN_RegEx) zum Speichern des regulären Ausdrucks, den wir für alle Extraktionen verwenden wollen.
Eine Reihe von ISBN-Codes für Bücher, die eine Buchhandlung bei mehreren Lieferanten bestellen möchte.
Für jeden ISBN-Code müssen wir die Startposition jedes der folgenden Elemente extrahieren:
EAN
Gruppe
Registrant
Veröffentlichung
Prüfsumme
Ladeskript
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
];
Ergebnisse
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:
Supplier
EAN
Group
Registrant
Publication
Checksum
Ergebnistabelle
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 diesem Fall enthält jedes Buch Komponenten an den gleichen Positionen.
Beispiel 2 – Diagrammformeln zum Auffinden von URL-Positionen (mit IndexRegEx()-Vergleich)
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript umfasst:
Eine Tabelle mit dem Namen Correspondence, die den Text einer E-Mail-Nachricht in einem Feld mit dem Namen EmailBody enthält.
Inhalt einer E-Mail-Nachricht, die Web-URLs enthält.
Wir möchten die Position der zweiten URL ermitteln, falls vorhanden, sowie die Positionen der folgenden Komponenten:
Domäne
Pfad
Wir möchten einen einzigen regulären Ausdruck verwenden, um alle Vorgänge zu steuern.
Ladeskript
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');
Ergebnisse
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie dieses Feld als Dimension hinzu:
ID
Fügen Sie die folgenden dynamischen Dimensionen hinzu:
IndexRegEx() gibt die Startposition der gesamten URL zurück, während IndexRegExGroup() Startpositionen von einzelnen Teilen der URL zurückgibt, die dem von uns verwendeten Wert für group entsprechen. Der Datensatz mit einem Wert für ID von 2 enthält nur eine URL, daher werden Werte von 0 zurückgegeben.
In allen Diagrammformeln wird derselbe reguläre Ausdruck verwendet, um verschiedene Informationen zurückzugeben. Eine Aufschlüsselung der im regulären Ausdruck definierten Gruppen sieht wie folgt aus.
Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!