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

ExtractRegEx() извлекает текст из входного строкового выражения, используя указанный шаблон регулярного выражения. Функция возвращает нулевое значение, если не найдено ни одного совпадения.

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

Синтаксис:

ExtractRegEx (text, regex [, field\_no])

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Строковое выражение, содержащее текст, который будет извлечен в возвращаемое значение. |
| regex | Регулярное выражение, которое будет использоваться для извлечения текста. |
| field\_no | Номер совпадения, которое нужно извлечь. Это полезно, когда в тексте может быть найдено несколько совпадений с регулярным выражением. Например, укажите значение `4`, чтобы извлечь четвертое совпадение. Данный аргумент является необязательным. Укажите отрицательное значение, чтобы изменить порядок совпадений на обратный.<br><br>Следующие правила применяются независимо от того, используется функция в скрипте загрузки или выражении диаграммы:<br><br><ul> <li> <p>Если <span>field_no</span> имеет положительное значение, функция вернет одно значение, определяя совпадения слева направо.</p> </li> <li> <p>Если <span>field_no</span> имеет отрицательное значение, функция вернет одно значение, определяя совпадения справа налево.</p> </li> </ul><br><br>При использовании функции в скрипте загрузки:<br><br><ul> <li> <p>Если функция <span>ExtractRegEx()</span> используется в операторе <span>LOAD</span> и <span>field_no</span> опускается, функция генерирует столько записей, сколько находит совпадений.</p> </li> <li> <p>Если с помощью функции <span>ExtractRegEx()</span> загружено несколько полей и ни в одном из них не задан аргумент <span>field_no</span>, будет создано декартово произведение всех возможных комбинаций.</p> </li> </ul><br><br>При использовании функции в выражениях диаграммы:<br><br><ul> <li> <p>Если значение <span>field_no</span> опущено, по умолчанию используется значение <code>1</code>.</p> </li> </ul> |

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

| Пример | Результат |
| --- | --- |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 1)` | Возвращает `a`, то есть первое найденное совпадение. |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 2)` | Возвращает `b`, то есть второе найденное совпадение. |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 4)` | Возвращает `1`, то есть четвертое найденное совпадение. |
| `ExtractRegEx('abc','a\|b',-1)` | Возвращает `b`. Если задано отрицательное значение, подсчет совпадений ведется в обратном порядке. |
| `ExtractRegEx('A,B C;1 2,3','[a-c]\|[4-9]')` | Возвращает нулевое значение, так как ExtractRegEx() учитывает регистр, а вариант без учета регистра не использовался. |
| `ExtractRegExI('A,B C;1 2,3','[a-c]\|[4-9]')` | Возвращает `A`, поскольку был использован вариант ExtractRegExI(), не учитывающий регистр. |

## Когда использовать ExtractRegEx

Можно использовать Extract RegEx() для извлечения информации, которую требуется изолировать от данных, которые могут также содержать другую информацию (например, произвольный текст или строки JSON). Пример.

* Извлекайте из текста адреса электронной почты, номера телефонов, номера счетов и другую информацию.

* Извлекайте из текста числовые значения (например, денежные суммы).

* Стандартизируйте форматирование текстовых или числовых данных.

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

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

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

Обзор

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

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

* Таблица `OrderDetails`, содержащая поле `OrderJson`.

* Поле `OrderJson` содержит строку JSON с данными заказа. Форматирование, такое как отступы и разрывы строк, было удалено из JSON. Данные заказа содержат адреса электронной почты, которые требуется извлечь в отдельные значения.

* Новая таблица `EmailAddresses`, которая загружается после `OrderDetails`. Оператор `EmailAddresses` LOAD загружает поле `OrderJson` из таблицы `OrderDetails` и создает новое вычисляемое поле `Email`, которое содержит извлеченные адреса электронной почты. Затем `OrderDetails` отбрасывается.

Требования:

* Адреса электронной почты в определенном домене: `example.com`.

* Адреса электронной почты, содержащие любое количество буквенно-цифровых символов, а также определенный набор специальных символов.

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

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');

EmailAddresses:

Load OrderJson, ExtractRegEx(OrderJson, '[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com') as Email Resident OrderDetails;

Drop table OrderDetails;
```

Результаты

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

* `Email`

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

| Email |
| --- |
| amalia.craig@example.com |
| jane.doe@example.com |
| john.doe@example.com |
| ken.roberts@example.com |

Если не указывать значение аргумента для field\_no, все совпадения будут автоматически извлечены в отдельные значения.

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

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

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

Обзор

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

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

* Таблица `Sales`, содержащая данные о продажах.

* В таблице `Sales` поле с именем `Amount`, которое содержит суммы транзакций в долларах США. Эти суммы выражаются в виде строк, которые включают символы и коды валют.

* Определение пользовательского поля в `Sales` с именем `OrderAmountNumeric_USD`, которое извлекает каждую сумму в чисто числовое значение. Эти данные должны быть в числовой форме, чтобы их можно было использовать в агрегированиях диаграмм.

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

```
SET DateFormat='MM-DD-YYYY';

Sales:

Load ExtractRegEx(Amount, '[0-9]+.[0-9]{2}') as OrderAmountNumeric_USD, * Inline `

OrderID, OrderDate, Product, Amount
1, '12-27-2024', Software, $100.31 USD
2, '12-28-2024', Electronics, $513.93 USD
3, '12-29-2024', Grocery, $34.66 USD
4, '12-30-2024', Furniture, $1124.58 USD
5, '12-31-2024', Software, $95.95 USD
6, '01-01-2025', Software, $601.00 USD
7, '01-02-2025', Grocery, $1534.20 USD
8, '01-03-2025', Produce, $51.49 USD
9, '01-04-2025', Home Improvement, $176.12 USD
10, '01-05-2025', Produce, $432.77 USD
11, '01-06-2025', Software, $270.01 USD
12, '01-07-2025', Electronics, $83.85 USD
13, '01-08-2025', Furniture, $65.65 USD
14, '01-09-2025', Electronics, $1526.39 USD
15, '01-10-2025', Software, $432.44 USD
16, '01-11-2025', Furniture, $888.15 USD
17, '01-12-2025', Furniture, $300.00 USD
18, '01-13-2025', Grocery, $109.53 USD
19, '01-14-2025', Furniture, $487.97 USD
20, '01-15-2025', Software, $65.09 USD
`;
```

Результаты

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

* `OrderID`

* `Amount`

* `OrderAmountNumeric_USD`

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

| OrderID | Amount | OrderAmountNumeric\_USD |
| --- | --- | --- |
| 1 | $100.31 USD | 100.31 |
| 2 | $513.93 USD | 513.93 |
| 3 | $34.66 USD | 34.66 |
| 4 | $1124.58 USD | 1124.58 |
| 5 | $95.95 USD | 95.95 |
| 6 | $601.00 USD | 601.00 |
| 7 | $1534.20 USD | 1534.20 |
| 8 | $51.49 USD | 51.49 |
| 9 | $176.12 USD | 176.12 |
| 10 | $432.77 USD | 432.77 |
| 11 | $270.01 USD | 270.01 |
| 12 | $83.85 USD | 83.85 |
| 13 | $65.65 USD | 65.65 |
| 14 | $1526.39 USD | 1526.39 |
| 15 | $432.44 USD | 432.44 |
| 16 | $888.15 USD | 888.15 |
| 17 | $300.00 USD | 300.00 |
| 18 | $109.53 USD | 109.53 |
| 19 | $487.97 USD | 487.97 |
| 20 | $65.09 USD | 65.09 |

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

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

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

Обзор

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

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

* Таблица `OrderDetails`, содержащая поле `OrderJson`.

* Поле `OrderJson` содержит строку JSON с данными заказа. Форматирование, такое как отступы и разрывы строк, было удалено из JSON. Данные заказа содержат адреса электронной почты, которые требуется извлечь в отдельные значения.

Требования:

* Адреса электронной почты в определенном домене: `example.com`.

* Адреса электронной почты, содержащие любое количество буквенно-цифровых символов, а также определенный набор специальных символов.

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

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');
```

Результаты

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

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',1)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',2)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',3)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',4)`

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

| =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',1) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',2) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',3) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',4) |
| --- | --- | --- | --- |
| john.doe@example.com | jane.doe@example.com | amalia.craig@example.com | ken.roberts@example.com |

## Подробнее

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