IndexRegExGroup — funkcja skryptu i funkcja wykresu
Funkcja IndexRegExGroup() przeszukuje wejściowy ciąg znaków i zwraca pozycję początkową n-tego wystąpienia podanego złożonego wzorca wyrażenia regularnego. Opcjonalny czwarty argument count dostarcza wartość n, która w przypadku pominięcia wynosi 1. Pozycje w ciągu znaków są numerowane od lewej do prawej od 1 w górę. Jeśli nie zostanie znalezione żadne dopasowanie, funkcja zwraca 0.
Funkcja ta wykonuje operacje z wyrażeniami regularnymi, w których rozróżniana jest wielkość liter. Zamiast tego można użyć wariantu IndexRegExGroupI(), aby wykonywać operacje z wyrażeniami regularnymi bez rozróżniania wielkości liter.
Składnia:
IndexRegExGroup
(text, regex, group [, count])
Typ zwracanych danych: liczba całkowita
Argumenty
Argument
Opis
text
Tekst ciągu wejściowego, w którym ma być wyszukiwane wyrażenie regularne.
regex
Wyrażenie regularne używane do wyszukiwania w ciągu wejściowym.
group
Numer grupy w przypadku złożonego wyrażenia regularnego.
Wartość group równa 0 zwraca indeks całego wyrażenia regularnego. Jeśli jednak wyrażenie regularne ma zwracać tylko indeks całego dopasowania, należy użyć funkcji IndexRegEx().
Można określić ujemną wartość group, aby wyszukiwać dopasowania od prawej do lewej.
count
Numer dopasowania. Jest to przydatne, gdy w tekście można znaleźć wiele dopasowań do wyrażenia regularnego. Na przykład określ wartość 4, aby wyodrębnić pozycję czwartego dopasowania.
Ten argument jest opcjonalny. Domyślnie 1, jeśli nie określono. Można określić ujemną wartość, aby wyszukiwać dopasowania od prawej do lewej.
Zwraca 4, co jest pozycją początkową drugiej grupy. W wejściowym wzorcu wyrażenia regularnego ciąg ([0-9]+) odpowiada drugiej grupie.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Zwraca 0, ponieważ IndexRegExGroup() rozróżnia wielkość liter.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Zwraca wartość 3. Jest używany wariant funkcji IndexRegExI(), który nie uwzględnia wielkości liter.
Kiedy używać
Zastosowania tej funkcji są następujące:
Identyfikacja miejsc występowania określonych wzorców tekstowych w większych fragmentach tekstu. Na przykład możesz chcieć się dowiedzieć, gdzie domena adresu e-mail jest używana w serii długich wiadomości e-mail.
Funkcja IndexRegExGroup() jest szczególnie przydatna do zaawansowanego przetwarzania danych i powszechnie stosowana w pierwszym kroku dłuższej, bardziej złożonej transformacji. Zwykle łatwiej jest rozwiązywać problemy za pomocą innych funkcji wyrażeń regularnych, takich jak ExtractRegExGroup(), MatchRegEx() i CountRegEx(), ale w pewnych sytuacjach IndexRegExGroup() oferuje rozwiązania, których te funkcje nie mogą zapewnić.
Przykład 1 — skrypt ładowania do znajdowania pozycji komponentów ISBN
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Utworzenie zmiennej, ISBN_RegEx, do przechowywania wyrażenia regularnego, którego chcemy użyć.
Zestaw kodów ISBN książek, które księgarnia chce zamówić od kilku dostawców.
Dla każdego kodu ISBN musimy wyodrębnić pozycję początkową każdego z następujących elementów:
EAN
Grupa
Rejestrujący
Publikacja
Suma kontrolna
Skrypt ładowania
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
];
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
Supplier
EAN
Group
Registrant
Publication
Checksum
Tabela wynikowa
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
W tym przypadku każda książka zawiera komponenty na tych samych pozycjach.
Przykład 2 — wyrażenia wykresu do wyszukiwania pozycji URL (z porównaniem IndexRegEx())
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Tabela o nazwie Correspondence, która zawiera tekst wiadomości e-mail w polu o nazwie EmailBody.
Treść wiadomości e-mail zawierająca adresy URL stron internetowych.
Chcemy znaleźć pozycję drugiego adresu URL, jeśli jest obecny, a także pozycje następujących komponentów:
Domena
Ścieżka
Chcemy użyć pojedynczego wyrażenia regularnego do wykonania wszystkich operacji.
Skrypt ładowania
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');
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:
IndexRegEx() zwraca początkową pozycję całego adresu URL, podczas gdy IndexRegExGroup() zwraca początkowe pozycje poszczególnych części adresu URL, odpowiadające użytej wartości group. Rekord o wartości ID równej 2 zawiera tylko jeden adres URL, więc są zwracane wartości 0.
To samo wyrażenie regularne jest używane we wszystkich wyrażeniach wykresu do zwracania różnych informacji. Rozbicie grup zdefiniowanych w wyrażeniu regularnym wygląda następująco.