IndexRegExGroup(), giriş dizesini arar ve belirtilen birleşik normal ifade deseninin n. oluşunun başlangıç konumunu döndürür. İsteğe bağlı dördüncü bir bağımsız değişken count n değerini sağlar; atlanması halinde bu 1 olur. Dizedeki konumlar soldan sağa doğru 1'den başlayıp artarak numaralandırılır. Eşleşme bulunamazsa fonksiyon 0 döndürür.
Bu fonksiyon, büyük/küçük harfe duyarlı regex işlemleri gerçekleştirir. Büyük/küçük harfe duyarlı olmayan regex işlemleri gerçekleştirmek için alternatif olarak IndexRegExGroupI() varyantını kullanabilirsiniz.
Söz Dizimi:
IndexRegExGroup
(text, regex, group [, count])
Dönüş verileri türü: tamsayı
Bağımsız Değişkenler
Bağımsız Değişken
Açıklama
text
İçinde normal ifade aramak istediğiniz giriş dizesi metni.
regex
Giriş dizesini aramak için kullanılacak normal ifade.
group
Bileşik normal ifade olması durumunda, grubun numarası.
group değeri 0 tüm regex'in indeksini döndürür. Ancak düzenli ifadenin yalnızca tüm eşleşmenin dizinini döndürmesi gerekiyorsa bunun yerine IndexRegEx() fonksiyonunu kullanın.
Eşleşmeleri sağdan sola doğru aramak için negatif bir group değeri belirtebilirsiniz.
count
Eşleşmenin sayısı. Bu, metinde normal ifade için birden fazla eşleşme bulunabileceği durumlarda kullanışlıdır. Örneğin, dördüncü eşleşmenin konumunu aramak için 4 değerini belirtin.
Bu, isteğe bağlı bir bağımsız değişkendir. Belirtilmediği takdirde varsayılan değer 1 olur. Eşleşmeleri sağdan sola doğru aramak için negatif bir değer belirtebilirsiniz.
Fonksiyon örnekleri
Örnek
Sonuç
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
3 (tam regex'in başlangıç konumu) döndürür.
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
3 (ilk grubun başlangıç konumu) döndürür.
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
İkinci grubun başlangıç konumu olan 4 döndürür. Giriş regex deseninde, ([0-9]+) dizesi ikinci gruba karşılık gelir.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
0 döndürür, çünkü IndexRegExGroup() büyük/küçük harfe duyarlıdır.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
3 döndürür. IndexRegExI() fonksiyonunun büyük/küçük harfe duyarsız varyantı kullanılır.
Ne zaman kullanılır?
Bu fonksiyon için kullanım durumları şunları içerir:
Belirli metin kalıplarının daha büyük metin gövdeleri içinde nerede ortaya çıktığını belirleme. Örneğin, bir e-posta adresi etki alanının bir dizi uzun e-posta iletisinde nerede kullanıldığını bilmek isteyebilirsiniz.
IndexRegExGroup() özellikle gelişmiş veri işleme için kullanışlıdır ve genellikle daha uzun, daha karmaşık bir dönüşümün ilk adımında kullanılır. Sorunları ExtractRegExGroup(), MatchRegEx() ve CountRegEx() gibi diğer regex fonksiyonlarıyla çözmek genellikle daha kolaydır, ancak bazen IndexRegExGroup(), bu fonksiyonların sağlayamadığı çözümler sunabilir.
Örnek 1 - ISBN bileşenlerinin konumlarını bulmak için komut dosyası
Genel bakış
Veri yükleme düzenleyicisini açın ve aşağıdaki yükleme kodunu yeni bir sekmeye ekleyin.
Yükleme kodu şunları içerir:
Kullanmak istediğimiz düzenli ifadeyi saklamak üzere ISBN_RegExdeğişkeninin oluşturulması.
Bir kitap mağazasının çeşitli tedarikçilerden sipariş etmek istediği kitaplar için ISBN kodları kümesi.
Her ISBN kodu için aşağıdakilerin her birinin başlangıç konumunu çıkarmamız gerekir:
EAN
Grup
Tescil Eden
Yayın
Checksum
Komut dosyası
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
];
Sonuçlar
Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanları boyut olarak ekleyin:
Supplier
EAN
Group
Registrant
Publication
Checksum
Sonuçlar tablosu
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
Bu durumda, her kitap aynı konumlarda bileşenler içerir.
Örnek 2 - URL konumlarını bulmak için grafik ifadeleri (IndexRegEx() karşılaştırması ile)
Genel bakış
Veri yükleme düzenleyicisini açın ve aşağıdaki yükleme kodunu yeni bir sekmeye ekleyin.
Yükleme kodu şunları içerir:
EmailBody adlı bir alanda e-posta mesajı metni içeren Correspondence adlı bir tablo.
Web URL'leri içeren e-posta mesajı içeriği.
Varsa ikinci URL'nin konumunun yanı sıra aşağıdaki bileşenlerin konumlarını da bulmak istiyoruz:
Etki Alanı
Yol
Tüm işlemleri gerçekleştirmek için tek bir düzenli ifade kullanmak istiyoruz.
Komut dosyası
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');
Sonuçlar
Verileri yükleyin ve bir sayfa açın. Yeni bir tablo oluşturun ve şu alanı boyut olarak ekleyin:
IndexRegEx(), URL'nin tamamını başlangıç konumunu döndürürken IndexRegExGroup(), kullandığımız group değerine karşılık gelen URL'nin ayrı bölümlerinin başlangıç konumlarını döndürür. ID değeri 2 olan kayıt yalnızca bir URL içerir, bu nedenle 0 değerleri döndürülür.
Aynı normal ifade, farklı bilgi parçalarını döndürmek için tüm grafik ifadelerinde kullanılır. Normal ifadede tanımlanan grupların dökümü aşağıdaki gibidir.