# ReplaceRegEx Функция скрипта и диаграммы

ReplaceRegEx() возвращает строку после замены одного или нескольких совпадений между входной строкой и заданным шаблоном регулярного выражения. Текст, который заменяет совпадающий текст, указан в аргументе to\_str. Функция работает слева направо, но если задано отрицательное значение occurrence, функция читает справа налево.

Эта функция выполняет операции с регулярными выражениями, чувствительные к регистру. В качестве альтернативы можно использовать вариант ReplaceRegExI() для выполнения операций с регулярными выражениями без учета регистра.

[ReplaceRegEx - Script syntax and chart functions](https://play.vidyard.com/1STBZFJeqoouP4SSofdb5R)

ReplaceRegEx (text, regex, to\_str [, occurrence])

Возвращаемые типы данных: string

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Текст входной строки, который требуется полностью или частично заменить новым текстом из to\_str. |
| regex | Регулярное выражение, определяющее, когда заменять текст. Заменяются совпадения между этим аргументом и аргументом text. |
| to\_str | Новый текст, который требуется использовать для замены существующего содержимого из text. |
| occurrence | Номер совпадения (между входным текстом и регулярным выражением) для замены новым текстом.<br><br>Данный аргумент является необязательным. По умолчанию 0, если опущено. Когда используется значение 0 или если аргумент опущен, все совпадения между text и regex заменяются на to\_str.<br><br>Можно указать отрицательное значение для occurrence, если требуется искать совпадения справа налево. |

Примеры функции

| Пример | Результат |
| --- | --- |
| `ReplaceRegEx('abc123','[0-9]','x')` | Возвращает `abcxxx`. В этом примере весь текст из входной строки, соответствующий шаблону регулярного выражения, заменяется новым текстом. |
| `ReplaceRegEx('abc123','[0-9]','x',1)` | Возвращает `abcx23`. Заменяются только первые вхождения совпадения между входной строкой и шаблоном регулярного выражения. |
| `ReplaceRegEx('abc123','[0-9]','x',4)` | Возвращает `abc123` . Существует только три возможных совпадения между входной строкой и шаблоном регулярного выражения, поэтому изменение не выполняется. |
| `ReplaceRegEx('ABC123','[a-c]','5')` | Возвращает `ABC123`. Изменение не выполняется, поскольку функция ReplaceRegEx() учитывает регистр, а вариант без учета регистра не используется. |
| `ReplaceRegExI('ABC123','[a-c]','5')` | Возвращает `555123`. Используется вариант функции ReplaceRegExI() без учета регистра. |

## Когда это следует использовать

Можно использовать ReplaceRegEx() для изменения текста с учетом стандартов форматирования и соответствия, особенно когда в данных присутствуют сложные шаблоны. Например, можно переформатировать строки телефонных номеров так, чтобы в них были включены только числовые значения.

При необходимости также можно использовать эту функцию для маскирования конфиденциальной информации, такой как персональная идентифицирующая информация (PII), чтобы она не отображалась пользователям, анализирующим ваше приложение.

## Пример 1: скрипт загрузки для обновления адресов электронной почты сотрудников

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

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Таблица `Employees`, содержащая адреса электронной почты сотрудников организации.

* Создайте новое поле, `Email_Updated`, чтобы выполнить операцию поиска и замены значений в поле `Email_Original`.

После того как компания изменила свое название, все адреса электронной почты были обновлены, чтобы отразить новое название.

Требования:

* Необходимо преобразовать все доменные ссылки `test.com` в `newcompanyname.com`.

* Нужно использовать операции с регулярными выражениями без учета регистра.

Скрипт загрузки

```
Employees:

Load 
ReplaceRegExI(Email_Original, '@[a-zA-Z0-9.-]*\.?test\.com', '@newcompanyname.com') as Email_Updated,
* Inline [
ID, Email_Original
1, john_doe@test.com
2, jane_doe@test.com
3, Michael_Andrews@test.com
4, charlie_kent@test.com
5, frances_johnson@test.com
6, rebecca_smith@test.com
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `ID`

* `Email_Original`

* `Email_Updated`

Результирующая таблица

| ID | Email\_Original | Email\_Updated |
| --- | --- | --- |
| 1 | john\_doe@test.com | john\_doe@newcompanyname.com |
| 2 | jane\_doe@test.com | jane\_doe@newcompanyname.com |
| 3 | Michael\_Andrews@test.com | Michael\_Andrews@newcompanyname.com |
| 4 | charlie\_kent@support.test.com | charlie\_kent@newcompanyname.com |
| 5 | frances\_johnson@test.com | frances\_johnson@newcompanyname.com |
| 6 | rebecca\_smith@hr.test.com | rebecca\_smith@newcompanyname.com |

## Пример 2: скрипт загрузки для форматирования кодов ISBN

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

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Переменные`ISBN_13` и `ISBN_10`, которые хранят регулярные выражения, используемые для шаблонов 13-значных и 10-значных строк ISBN, соответственно.

* Таблица `Employees`, содержащая необработанные числовые значения для кодов книг ISBN. Таблица содержит как 13-значные, так и 10-значные коды ISBN.

* Несколько операций для извлечения каждой части ISBN, а затем возвращение строки, которая отображает полный код в стандартном, ожидаемом формате. Используется комбинация ReplaceRegEx(), MatchRegEx(), ExtractRegExGroup() и Pick().

Требования:

* Необходимо отформатировать числа в более удобочитаемый текст, используя стандартное форматирование:

  * ISBN ###-#-####-####-#

  * ISBN #-###-#####-#

Скрипт загрузки

```
Set ISBN_13 = '^([0-9]{3})([0-9]{1})([0-9]{4})([0-9]{4})([0-9]{1})$';
Set ISBN_10 = '^([0-9]{1})([0-9]{3})([0-9]{5})([0-9]{1})$';

Formatted_Codes:

Load
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_13)', '$(ISBN_10)'), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_13)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4 & '-' & ISBN_Component5), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_10)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4)) as ISBN_Formatted;

Load *,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 1, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 1, 1)) as ISBN_Component1,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 2, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 2, 1)) as ISBN_Component2,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 3, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 3, 1)) as ISBN_Component3,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 4, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 4, 1)) as ISBN_Component4,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 5, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 5, 1)) as ISBN_Component5
inline `
ISBN_Unformatted
1233123412340
0122012301234
0001012301232
0111234567
5552555555553
2224222222222
1901234568
3333333333333
5551515151513
2321232323231
2444444444
8880999900000
`;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:

* `ISBN_Formatted`

Результирующая таблица

| ISBN\_Formatted |
| --- |
| ISBN 000-1-0123-0123-2 |
| ISBN 0-111-23456-7 |
| ISBN 1-901-23456-8 |
| ISBN 2-444-44444-4 |
| ISBN 012-2-0123-0123-4 |
| ISBN 123-3-1234-1234-0 |
| ISBN 222-4-2222-2222-2 |
| ISBN 232-1-2323-2323-1 |
| ISBN 333-3-3333-3333-3 |
| ISBN 555-1-5151-5151-3 |
| ISBN 555-2-5555-5555-3 |
| ISBN 888-0-9999-0000-0 |

## Пример 3: выражение диаграммы для обновления дополнительных адресов электронной почты

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

#### Выражение диаграммы и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Таблица `Employees`, содержащая адреса электронной почты сотрудников организации. Для каждого сотрудника в одной строке хранится несколько адресов электронной почты.

Требования:

* Дополнительные адреса электронной почты необходимо обновить, заменив домен на `newcompanyname.com`. Обновлять основные адреса электронной почты не требуется.

* Нужно использовать операции с регулярными выражениями без учета регистра.

Скрипт загрузки

```
Employees:

Load * Inline [
ID, Emails
1, Primary: john_doe@test.com Secondary: john_michael_doe@example.com
2, Primary: jane_doe@test.com Secondary: jane_tabitha_doe_doe@example.com
3, Primary: Michael_Andrews@test.com Secondary: Michael_John_Andrews@example.com
4, Primary: charlie_kent@test.com Secondary: charlie_peter_kent@example.com
5, Primary: frances_johnson@test.com Secondary: frances_johnson@example.com
6, Primary: rebecca_smith@test.com Secondary: rebecca_danielle_smith@example.com
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `ID`

* `Emails`

Добавьте следующее вычисляемое измерение:

```
=ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]*\.?[a-zA-Z0-9]*\.com','@newcompanyname.com',2)
```

Результирующая таблица

| ID | Emails | =ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]\*\.?example\.com','@newcompanyname.com',2) |
| --- | --- | --- |
| 1 | Primary: john\_doe@test.com Secondary: john\_michael\_doe@example.com | Primary: john\_doe@test.com Secondary: john\_michael\_doe@newcompanyname.com |
| 2 | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@example.com | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@newcompanyname.com |
| 3 | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@example.com | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@newcompanyname.com |
| 4 | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@example.com | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@newcompanyname.com.com |
| 5 | Primary: frances\_johnson@test.com Secondary: frances\_johnson@example.com | Primary: frances\_johnson@test.com Secondary: frances\_johnson@newcompanyname.com |
| 6 | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@example.com | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@newcompanyname.com |

Указав значение 2 для аргумента occurrence, можно обновить только второй экземпляр, соответствующий шаблону регулярного выражения.

[Работа с регулярными выражениями в скриптах загрузки и выражениях диаграммы](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)