# IndexRegEx Funzione per script e grafici

IndexRegEx() effettua una ricerca nella stringa di input e restituisce la posizione iniziale dell'occorrenza n-esima del modello di espressione regolare specificato. Un terzo argomento opzionale count fornisce il valore di n, che corrisponde a 1 se omesso. Le posizioni nella stringa sono numerate da sinistra a destra a partire dal valore 1 in poi. Se non viene trovata alcuna corrispondenza, la funzione restituisce 0.

Questa funzione esegue operazioni regex che distinguono tra maiuscole e minuscole. In alternativa, è possibile utilizzare la variante IndexRegExI() per eseguire operazioni regex senza distinzione tra maiuscole e minuscole.

Sintassi:

IndexRegEx (text, regex [, count])

Tipo di dati restituiti: numero intero

Argomenti

| Argomento | Descrizione |
| --- | --- |
| text | Il testo della stringa di input in cui si desidera cercare un'espressione regolare. |
| regex | L'espressione regolare da utilizzare per la ricerca della stringa di input. |
| count | Il numero della corrispondenza. Questo è utile quando nel testo si possono trovare più corrispondenze per l'espressione regolare. Per esempio, specificare il valore `4` per estrarre la posizione della quarta corrispondenza.<br><br>Questo argomento è facoltativo. Se non viene specificata, l'impostazione predefinita è 1. È possibile specificare un valore negativo per cercare le corrispondenze da destra a sinistra. |

Esempi di funzioni

| Esempio | Risultato |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | Restituisce `3` (la posizione iniziale della prima corrispondenza). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | Restituisce `0` (la regex non ha una seconda corrispondenza). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | Restituisce `0`, perché IndexRegEx() fa distinzione tra maiuscole e minuscole. |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | Restituisce `3`. Viene utilizzata la variante senza distinzione tra maiuscole e minuscole della funzione, IndexRegExI(). |

## Quando usare IndexRegEx

I casi d'uso di questa funzione includono:

* Identificazione di dove si verificano modelli testuali specifici all'interno di corpi di testo più ampi. Ad esempio, potrebbe essere necessario sapere dove un modello di indirizzo e-mail viene utilizzato in una serie di lunghi messaggi e-mail.

* La funzione IndexRegEx() è particolarmente utile per l'elaborazione avanzata dei dati e viene comunemente utilizzata nella prima fase di una trasformazione più lunga e complessa. In genere, è più facile risolvere i problemi con altre funzioni regex come ExtractRegEx(), MatchRegEx() e CountRegEx(), ma a volte IndexRegEx() offre soluzioni che queste funzioni non possono fornire.

## Esempio 1 - script di caricamento per identificare i libri in base all'ISBN

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegEx.htm)

#### Script di caricamento e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* La tabella `ISBN`, che include il contenuto di un messaggio e-mail in un campo denominato `EmailBody`.

Bisogna trovare le posizioni di tutti i codici ISBN a 13 cifre dal messaggio e-mail in linguaggio naturale.

Script di caricamento

```
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/';
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

Tabella dei risultati

| ISBNCode1 | ISBNCode2 | ISBNCode3 |
| --- | --- | --- |
| 301 | 487 | 588 |

## Esempio 2 - espressione del grafico per identificare i contatti con numeri di telefono secondari

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegEx.htm)

#### Espressione del grafico e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* Una tabella denominata `BusinessContactInfo`, che contiene informazioni sulle aziende trovate sul sito web di ciascuna azienda.

* `ContactInfo` è un campo che contiene i numeri di telefono dell'azienda. Bisogna determinare quali aziende hanno più numeri di telefono disponibili.

Requisiti:

* I numeri di telefono devono seguire il sistema NANP (piano di numerazione nordamericano), con 10 cifre.

* Bisogna consentire che il prefisso sia racchiuso tra parentesi.

* Bisogna consentire la presenza di un singolo spazio vuoto o di un trattino tra ogni segmento di un numero di telefono.

Script di caricamento

```
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');
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione:

* `CompanyName`

Aggiungere la seguente dimensione calcolata alla tabella:

```
=if(IndexRegEx(ContactInfo, '\({0,1}[0-9]{3}\){0,1}[ -]{0,1}[0-9]{3}[ -]{0,1}[0-9]{4}', 2)=0, 'No secondary phone number(s)', 'Has secondary phone number(s)')
```

Tabella dei risultati

| CompanyName | =if(IndexRegEx(ContactInfo, '\({0,1}[0-9]{3}\){0,1}[ -]{0,1}[0-9]{3}[ -]{0,1}[0-9]{4}', 2)=0, 'No secondary phone number(s)', 'Has secondary phone number(s)') |
| --- | --- |
| Company A | Has secondary phone number(s) |
| Company B | Has secondary phone number(s) |
| Company C | No secondary phone number(s) |

`Company A` ha un numero di telefono secondario. `Company B` ha due numeri di telefono secondari. `Company C` ha tre numeri di telefono secondari.

Nota informaticaLa funzione MatchRegEx() è utile anche per questi tipi di casi d'uso di convalida.

## Ulteriori informazioni

* [Lavorare con le espressioni regolari negli script di caricamento e nelle espressioni del grafico](https://help.qlik.com/it-IT/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)