# CountRegEx Skript- und Diagrammfunktion

CountRegEx() gibt die Anzahl der Vorkommen des Musters für den angegebenen regulären Ausdruck im Eingabestringtext zurück. Gibt es keine Übereinstimmung, ist das Ergebnis 0.

Diese Funktion führt Regex-Vorgänge durch, bei denen die Groß- und Kleinschreibung beachtet wird. Sie können alternativ die Variante CountRegExI() verwenden, um Regex-Vorgänge ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen.

Syntax:

CountRegEx (text, regex)

Rückgabe Datentyp: numerisch

Argumente

| Argument | Beschreibung |
| --- | --- |
| text | Der Text des Eingabestrings, in dem Sie nach einem regulären Ausdruck suchen möchten. |
| regex | Das Muster des regulären Ausdrucks, nach dem gesucht werden soll. |

Funktionsbeispiele

| Beispiel | Ergebnis |
| --- | --- |
| `CountRegEx('abc123','[a-z]')` | Liefert `3`. |
| `CountRegEx('abc123','[a-z][0-9]')` | Liefert `1`. |
| `CountRegEx('abc123','[0-9]')` | Liefert `3`. |
| `CountRegEx('ABC','[a-z]{3}')` | Liefert `0`. |
| `CountRegExI('ABC','[a-z]{3}')` | Liefert `1`. Da die Variante CountRegExI() verwendet wird, wird bei der Textsuche nicht zwischen Groß- und Kleinschreibung unterschieden. |

## Verwendung von CountRegEx

Beispiele für Anwendungsfälle für CountRegEx() sind:

* Zählen, wie oft ein bestimmtes Textmuster in einem String vorkommt. Sie können zum Beispiel nach Instanzen von E-Mail-Adressen, Telefonnummern und anderen Informationen in Dokumenten und E-Mail-Nachrichten suchen.

* Überprüfen, ob Daten einer bestimmten Syntaxanforderung entsprechen. Sie könnten zum Beispiel Fehler bei der Dateneingabe identifizieren.

## Beispiel 1 – Ladeskript zum Zählen der gültigen Jahresbereiche

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Eine Tabelle mit dem Namen `Vehicles`, die eine Liste von Fahrzeugen enthält, zusammen mit dem Zustand und dem Modelljahr jedes Fahrzeugs.

* Für jeden Datensatz in `Vehicles` eine Berechnung, um festzustellen, ob der Jahresbereich für das Fahrzeug der erwarteten Syntax entspricht. Gültige Jahresbereiche sind die 1990er, 2000er, 2010er und 2020er Jahre. Diese Berechnung wird mit der Funktion CountRegEx() durchgeführt.

Ladeskript

```
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
];
```

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

* `Vehicle_ID`

* `Valid_Year_Data`

Ergebnistabelle

| 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 |

Sie können dem Arbeitsblatt auch einen KPI hinzufügen und die folgende Kennzahl hinzufügen:

```
Sum(Valid_Year_Data)
```

Dieses Diagramm zeigt die Gesamtzahl der Datensätze mit gültigen Werten für Model\_YearRange.

InformationshinweisAuch die Funktion MatchRegEx() ist für diese Art von Validierungsfällen nützlich.

## Beispiel 2 – Ladeskript zum Zählen der Anzahl von E-Mail-Adressen in Textstrings

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Eine Tabelle mit dem Namen `Employees`, die Daten über die Mitarbeiter eines Unternehmens enthält. Alle E-Mail-Adressen der einzelnen Mitarbeiter sind in einem einzigen String enthalten.

* Die Erstellung eines Feldes (`NoOfEmails`), um zu berechnen, wie viele E-Mail-Adressen im Eingabestring für jeden Mitarbeiter enthalten sind.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

* `ID`

* `Emails`

* `NoOfEmails`

Ergebnistabelle

| 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 |

## Beispiel 3 – Diagrammformel zum Zählen der Vorkommen eines Strings

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

#### Diagrammformel und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript in einen neuen Abschnitt ein.

Das Ladeskript enthält den Text aus einer Reihe von Firmenkorrespondenzen, die an die Mitarbeiter einer Organisation verschickt wurden. Die Daten wurden bereits von allen personenbezogenen Daten bereinigt, mit Ausnahme des Firmennamens und der E-Mail-Adresse, von der die jeweilige Korrespondenz stammt. Der Text jeder Nachricht wurde zu einem einzigen zusammenhängenden String zusammengefasst. Es wurden also alle Formatierungs- und Zeilenumbruchszeichen entfernt.

Unsere Anforderungen:

* Identifizieren, welche Nachrichten einen String enthalten, der die E-Mail-Adresse TestCompanyNameCorrespondence@test.com enthält, zusammen mit einer spezifischen Einleitung für diese Adresse, die angibt, dass sie der Absender war.

* Wir möchten flexibel sein, was die Identifizierung von Einleitungen angeht, aber auch einige klare Einschränkungen festlegen. Die Einleitungen Sender und Sent by werden beide als gültig angesehen. Um dieses Ziel zu erreichen, können Regex-Muster verwendet werden.

* Die Groß- und Kleinschreibung von E-Mail-Adressen spielt dabei keine Rolle. Daher sollte bei der Suche die Groß- und Kleinschreibung nicht berücksichtigt werden.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

* ID

* MessageBody

Fügen Sie die folgende Kennzahl hinzu:

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

Legen Sie in den Eigenschaften der Kennzahl die Gesamtwerte-Funktion auf Sum fest. Damit wird die Gesamtwerte-Zeile oben in der Tabelle so konfiguriert, dass sie die Gesamtzahl der Datensätze zählt, die zur Anzahl beitragen.

Die Kennzahl zählt die Anzahl der Übereinstimmungen mit dem angegebenen Regex-Muster innerhalb des Nachrichteninhalts. Im Regex-Muster steht .\* für eine beliebige Anzahl von Zeichen mit Ausnahme von Zeilenumbrüchen. Das Muster berücksichtigt auch Variationen in der Art und Weise, wie die E-Mail-Adresse eingeleitet wird: Sowohl Sender als auch Sent by sind gültige Übereinstimmungen. Die Variante CountRegExI() der Funktion gewährleistet eine Suche ohne Berücksichtigung von Groß- und Kleinschreibung.

Ergebnistabelle

| 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 |

Unter den fünf Nachrichten gibt es drei, die mit dem angegebenen Regex-Muster übereinstimmen. Jede Nachricht enthält eine Übereinstimmung.

InformationshinweisAuch die Funktion MatchRegEx() ist für diese Art von Validierungsfällen nützlich.

## Weitere Informationen

* [Arbeiten mit regulären Ausdrücken in Ladeskripten und Diagrammformeln](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)