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

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

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

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

Синтаксис:

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

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| 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/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)