IndexRegExGroup() söker igenom indatasträngen och returnerar startpositionen för den n:te förekomsten av det sammansatta reguljära uttrycksmönster som anges. Ett valbart fjärde argument count ger värdet för n, vilket annars är 1. Strängens positioner är numrerade vänster till höger från 1 och uppåt. Om ingen matchning hittas returnerar funktionen 0.
Den här funktionen utför regexoperationer som är skiftlägeskänsliga. Alternativt kan du använda varianten IndexRegExGroupI() för att utföra skiftlägesokänsliga regexoperationer.
Syntax:
IndexRegExGroup
(text, regex, group [, count])
Returnerad datatyp: heltal
Argument
Argument
Beskrivning
text
Indatasträngens text inom vilken du vill söka efter ett reguljärt uttryck.
regex
Det reguljära uttryck som ska användas för att söka i indatasträngen.
group
Gruppens nummer, om det rör sig om ett sammansatt reguljärt uttryck.
Ett group-värde på 0 returnerar indexet för hela regex. Men om det reguljära uttrycket bara behöver returnera indexet för hela matchningen, använder du funktionen IndexRegEx() i stället.
Du kan ange ett negativt värde för group för att söka efter matchningar från höger till vänster.
count
Numret på matchningen. Detta är användbart när flera träffar för det reguljära uttrycket kan finnas i texten. Ange t.ex. värdet 4 för att få fram positionen för den fjärde matchningen.
Det här är ett valfritt argument. Standard är 1 om det inte anges. Du kan ange ett negativt värde för att söka efter matchningar från höger till vänster.
Exempel på funktioner
Exempel
Resultat
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
Returnerar 3 (startposition för komplett regex).
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
Returnerar 3 (startpositionen för den första gruppen).
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
Returnerar 4, som är startpositionen för den andra gruppen. I det inmatade regexmönstret motsvarar strängen ([0-9]+) den andra gruppen.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Returnerar 0, eftersom IndexRegExGroup() är skiftlägeskänsligt.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Returnerar 3. Den skiftlägesokänsliga varianten av funktionen, IndexRegExI(), används.
Användning
Användningsfall för denna funktion inkluderar:
Identifiera var specifika textmönster förekommer inom större textmassor. Du kanske till exempel vill veta var domänen för en e-postadress används i en serie långa e-postmeddelanden.
IndexRegExGroup() är särskilt användbart för avancerad databehandling och används ofta i det första steget i en längre och mer komplex datatransformering. Det är vanligtvis lättare att lösa problem med andra regexfunktioner som ExtractRegExGroup(), MatchRegEx() och CountRegEx(), men det kan finnas tillfällen då IndexRegExGroup() erbjuder lösningar som dessa funktioner inte kan tillhandahålla.
Exempel 1 – laddningsskript för att hitta positioner för ISBN-komponenter
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
Skapandet av en variabel, ISBN_RegEx, för att lagra det reguljära uttryck som vi vill använda.
En uppsättning ISBN-koder för böcker som en bokhandel vill beställa från flera leverantörer.
För varje ISBN-kod måste vi extrahera startpositionen för var och en av följande:
EAN
Grupp
Registrant
Publication
Checksum
Laddningsskript
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
];
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:
Supplier
EAN
Group
Registrant
Publication
Checksum
Resultattabell
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
I det här fallet innehåller varje bok komponenter i samma positioner.
Exempel 2 – diagramuttryck för att hitta URL-positioner (med jämförelse på IndexRegEx() )
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
En tabell med namnet Correspondence, som innehåller e-postmeddelandetexten i ett fält med namnet EmailBody.
Innehåll i e-postmeddelanden som innehåller URL:er.
Vi vill hitta positionen för den andra URL:en, om sådan finns, samt positionerna för följande komponenter:
Domän
Sökväg
Vi vill använda ett enda reguljärt uttryck för att köra alla operationer.
Laddningsskript
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');
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till det här fältet som en dimension:
IndexRegEx() returnerar startpositionen för hela URL:en, medan IndexRegExGroup() returnerar startpositionerna för enskilda delar av URL:en, vilket motsvarar det group-värde vi använde. Posten med värdet 2 på ID innehåller bara en URL, så värden med 0 returneras.
Samma reguljära uttryck används i alla diagramuttryck för att returnera olika typer av information. En uppdelning av de grupper som definieras i det reguljära uttrycket följer.
Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!