# CountRegEx Funzione per script e grafici

CountRegEx() restituisce il numero di occorrenze del modello dell'espressione regolare specificato nel testo della stringa di input. In mancanza di corrispondenze, viene restituito 0.

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

Sintassi:

CountRegEx (text, regex)

Tipo di dati restituiti: numerico

Argomenti

| Argomento | Descrizione |
| --- | --- |
| text | Il testo della stringa di input in cui si desidera cercare un'espressione regolare. |
| regex | Il modello di espressione regolare su cui si desidera eseguire una ricerca. |

Esempi di funzioni

| Esempio | Risultato |
| --- | --- |
| `CountRegEx('abc123','[a-z]')` | Restituisce `3`. |
| `CountRegEx('abc123','[a-z][0-9]')` | Restituisce `1`. |
| `CountRegEx('abc123','[0-9]')` | Restituisce `3`. |
| `CountRegEx('ABC','[a-z]{3}')` | Restituisce `0`. |
| `CountRegExI('ABC','[a-z]{3}')` | Restituisce `1`. Poiché viene utilizzata la variante CountRegExI(), le ricerche di testo non fanno distinzione tra maiuscole e minuscole. |

## Quando usare CountRegEx

Gli esempi di casi d'uso per CountRegEx() includono:

* Il conteggio del numero di volte in cui un determinato modello di testo ricorre all'interno di una stringa. Ad esempio, è possibile cercare le istanze di indirizzi e-mail, numeri di telefono e altre informazioni nei documenti e nei messaggi e-mail.

* La convalida se i dati corrispondono a un requisito di sintassi specifico. Ad esempio, è possibile identificare i casi di errore nell'inserimento dei dati.

## Esempio 1 - script di caricamento per contare gli intervalli di anni validi

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/CountRegEx.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:

* Una scheda denominata `Vehicles` contenente un elenco di veicoli, con le condizioni e l'anno del modello di ciascun veicolo.

* Per ogni record in `Vehicles`, viene effettuato un calcolo per determinare se l'intervallo di anni per il veicolo soddisfa la sintassi prevista. Gli intervalli di anni validi includono gli anni '90, 2000, 2010 e 2020. Questo calcolo viene eseguito con la funzione CountRegEx().

Script di caricamento

```
Vehicles:
Load CountRegEx(Model_YearRange, '(^19[0-9][0-9]s$)|(^20[0-9][0-9]s$)') as Valid_Year_Data,
* Inline [
Vehicle_ID, Condition, Model_YearRange
1, Good,20100s
2,Fair,2020s
3, Poor,2020s
4, Good,210s
5, Excellent,2000s
6, Excellent,2020s
7, Excellent,202s
8, Good,2010s
9, Poor,2010ss
10, Poor,1990s
];
```

Risultati

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

* `Vehicle_ID`

* `Valid_Year_Data`

Tabella dei risultati

| Vehicle\_ID | Valid\_Year\_Data |
| --- | --- |
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 0 |
| 5 | 1 |
| 6 | 1 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 1 |

È possibile anche aggiungere un KPI al foglio e aggiungere questa misura:

```
Sum(Valid_Year_Data)
```

Questo grafico mostra il numero totale di record con valori Model\_YearRange validi.

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

## Esempio 2 - script di caricamento per contare il numero di indirizzi e-mail nelle stringhe di testo

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/CountRegEx.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:

* Una tabella denominata `Employees` contenente i dati dei dipendenti di un'azienda. Tutti gli indirizzi e-mail di ciascun dipendente sono contenuti in un'unica stringa.

* La creazione di un campo, `NoOfEmails`, per calcolare il numero di indirizzi e-mail contenuti nella stringa di input per ogni dipendente.

Script di caricamento

```
Employees:

Load CountRegExI(Emails, '@[a-zA-Z0-9.-]*\.?[a-zA-Z0-9]*\.com') as NoOfEmails,
* Inline `
ID	Emails
1	john_doe@test.com john_michael_doe@example.com j.doe123@example123.com
2	jane_doe@test.com
3	Michael_Andrews@test.com Michael_John_Andrews@example.com
4	charlie_kent@support.test.com charlie_peter_kent@support.example.com cp.kent.1985@test123.com c_p_kent@test123.com
5	frances_johnson@test.com frances_johnson@example.com
6	rebecca_smith@hr.test.com
` (delimiter is '\t');
```

Risultati

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

* `ID`

* `Emails`

* `NoOfEmails`

Tabella dei risultati

| ID | Emails | NoOfEmails |
| --- | --- | --- |
| 1 | john\_doe@test.com john\_michael\_doe@example.com j.doe123@example123.com | 3 |
| 2 | jane\_doe@test.com | 1 |
| 3 | Michael\_Andrews@test.com Michael\_John\_Andrews@example.com | 2 |
| 4 | charlie\_kent@support.test.com charlie\_peter\_kent@support.example.com cp.kent.1985@test123.com c\_p\_kent@test123.com | 4 |
| 5 | frances\_johnson@test.com frances\_johnson@example.com | 2 |
| 6 | rebecca\_smith@hr.test.com | 1 |

## Esempio 3 - espressione del grafico per contare le occorrenze della stringa

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

#### Espressione del grafico e risultati

Panoramica

Aprire Editor caricamento dati, quindi aggiungere il seguente script di caricamento in una nuova sezione.

Lo script di caricamento contiene il testo di una serie di corrispondenze aziendali inviate ai dipendenti di un'organizzazione. I dati sono già stati puliti e non contengono informazioni di identificazione personale (PII), a parte il nome dell'azienda e l'indirizzo e-mail che ha inviato ogni corrispondenza. Il corpo di ogni messaggio è stato compresso in un'unica stringa continua. In altre parole, sono stati rimossi tutti i caratteri di formattazione e di interruzione di riga.

Requisiti:

* Identificare quali messaggi contengono una stringa che include l'indirizzo e-mail TestCompanyNameCorrespondence@test.com, oltre a un'introduzione specifica a questo indirizzo che indica che si tratta del mittente.

* Per quanto riguarda le introduzioni da identificare, è necessaria una certa flessibilità, ma anche disporre di restrizioni precise. I valori delle introduzioni Sender e Sent by sono entrambi considerati validi. Per raggiungere questo obiettivo, si possono utilizzare i modelli regex.

* La distinzione tra maiuscole e minuscole per gli indirizzi e-mail non è un fattore. Pertanto, la ricerca non deve distinguere tra maiuscole e minuscole.

Script di caricamento

```
Correspondences:
Load * Inline [
ID|MessageBody
1|Sent by-- TestCompanyNameCorrespondence@test.com Good morning TestCompanyName team! I hope you are all well. I am just reaching out about the fabulous benefits package we launched just year. Our goal is to take a poll of what you all think. Can you please rate the new options from 1-10 in a response to this email, by this Tuesday? Thank you! 
2|Sender: TestCompanyNameIT@test.com Did you know you can access our IT portal anytime, from any of your company devices? It's true! Reach out to your team lead to learn more.
3|Sender: TESTCOMPANYNAMECORRESPONDENCE@test.COM URGENT: This is a message to inform employees of an ongoing issue with our local branch. The branch will be closed until further notice. Thank you
4|Sender: TestCompanyNameVolunteering@test.com Dear team! We are looking for volunteers to help with this year's charity event! We need 40 volunteers to help with the event. If you are interested, please send an email to your direct supervisor. Thanks, TestCompanyName team members, for helping make the world a better place!
5|Sender is TestCompanyNameCorrespondence@test.com Hi folks, it's time to announce the annual TestCompanyName staff party! The party will be taking place at the office this year. Please make sure to RSVP, and we hope to see you there! Sincerely, the TestCompanyName management team
] (delimiter is |);
```

Risultati

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

* ID

* MessageBody

Aggiungere la misura seguente:

```
=CountRegExI(MessageBody,'(Sender.*TestCompanyNameCorrespondence@test.com)|(Sent by.*TestCompanyNameCorrespondence@test.com)')
```

Nelle proprietà della misura, impostare la funzione Totali su Sum. Questa configura la riga dei totali nella parte superiore della tabella per contare il numero totale di record che contribuiscono al conteggio.

La misura conta il numero di corrispondenze per il modello regex specificato all'interno del contenuto del messaggio. Nel modello regex, .\* indica un numero qualsiasi di qualunque carattere, ad eccezione dei caratteri di interruzione di riga. Il modello tiene conto anche delle variazioni nel modo in cui viene introdotto l'indirizzo e-mail: sia Sender che Sent by sono corrispondenze valide. La variante CountRegExI() della funzione assicura la ricerca senza distinzione tra maiuscole e minuscole.

Tabella dei risultati

| ID | MessageBody | =CountRegExI(MessageBody,'(Sender.\*TestCompanyNameCorrespondence@test.com)\|(Sent by.\*TestCompanyNameCorrespondence@test.com)') |
| --- | --- | --- |
| Totals | - | 3 |
| 1 | Sent by-- TestCompanyNameCorrespondence@test.com Good morning TestCompanyName team! I hope you are all well. I am just reaching out about the fabulous benefits package we launched just year. Our goal is to take a poll of what you all think. Can you please rate the new options from 1-10 in a response to this email, by this Tuesday? Thank you! | 1 |
| 2 | Sender: TestCompanyNameIT@test.com Did you know you can access our IT portal anytime, from any of your company devices? It's true! Reach out to your team lead to learn more. | 0 |
| 3 | Sender: TESTCOMPANYNAMECORRESPONDENCE@TEST.COM URGENT: This is a message to inform employees of an ongoing issue with our local branch. The branch will be closed until further notice. Thank you | 1 |
| 4 | Sender: TestCompanyNameVolunteering@test.com Dear team! We are looking for volunteers to help with this year's charity event! We need 40 volunteers to help with the event. If you are interested, please send an email to your direct supervisor. Thanks, TestCompanyName team members, for helping make the world a better place! | 0 |
| 5 | Sender is TestCompanyNameCorrespondence@test.com Hi folks, it's time to announce the annual TestCompanyName staff party! The party will be taking place at the office this year. Please make sure to RSVP, and we hope to see you there! Sincerely, the TestCompanyName management team | 1 |

Tra i cinque messaggi, ce ne sono tre che corrispondono al modello regex specificato. Ogni messaggio contiene una corrispondenza.

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)