Funkcja IndexRegEx() przeszukuje wejściowy ciąg znaków i zwraca pozycję początkową n-tego wystąpienia podanego wzorca wyrażenia regularnego. Opcjonalny trzeci 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 IndexRegExI(), aby wykonywać operacje z wyrażeniami regularnymi bez rozróżniania wielkości liter.
Składnia:
IndexRegEx
(text, regex [, 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.
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.
Przykłady funkcji
Przykład
Wynik
IndexRegEx('abc123','[a-z][0-9]+')
Zwraca 3 (pozycja początkowa pierwszego dopasowania).
IndexRegEx('abc123','[a-z][0-9]+',2)
Zwraca 0 (wyrażenie regularne nie ma drugiego dopasowania).
IndexRegEx('ABC123','[a-z][0-9]+')
Zwraca 0, ponieważ IndexRegEx() rozróżnia wielkość liter.
IndexRegExI('ABC123','[a-z][0-9]+')
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 wzorzec adresu e-mail jest używany w serii długich wiadomości e-mail.
Funkcja IndexRegEx() 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 ExtractRegEx(), MatchRegEx() i CountRegEx(), ale w pewnych sytuacjach IndexRegEx() oferuje rozwiązania, których te funkcje nie mogą zapewnić.
Przykład 1 — skrypt ładowania do identyfikacji książek według ISBN
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Tabela o nazwie ISBN, która zawiera tekst wiadomości e-mail w polu o nazwie EmailBody.
Chcemy znaleźć pozycje wszystkich 13-cyfrowych kodów ISBN w treści w języku naturalnym w wiadomości e-mail.
Skrypt ładowania
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/';
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
ISBNCode1
ISBNCode2
ISBNCode3
Tabela wynikowa
ISBNCode1
ISBNCode2
ISBNCode3
301
487
588
Przykład 2 — wyrażenie wykresu do identyfikacji kontaktów z dodatkowymi numerami telefonów
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Tabela o nazwie BusinessContactInfo, zawierająca informacje o firmach znalezione w witrynie internetowej każdej z nich.
ContactInfo to pole zawierające firmowe numery telefonów. Chcemy ustalić, które firmy mają wiele dostępnych numerów telefonów.
Nasze wymagania:
Numery telefonów muszą być numerami NANP składającymi się z 10 cyfr.
Chcemy zezwolić na ujęcie numeru kierunkowego w nawiasy.
Chcemy zezwolić na pojedynczą pustą spację lub myślnik między każdym segmentem numeru telefonu.
Skrypt ładowania
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');
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar: