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

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

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

Синтаксис:

SubFieldRegEx (text, regex\_delimiter [, field\_no])

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Текст входной строки, в которой требуется выполнить поиск шаблона регулярного выражения. |
| regex\_delimiter | Строковое выражение, содержащее регулярное выражение для использования в качестве разделителя. Вы можете указать несколько разделителей в одном шаблоне регулярного выражения, разделив их символом `\|` (вертикальная черта). |
| 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>SubFieldRegEx()</span> используется в операторе <span>LOAD</span> и <span>field_no</span> опускается, функция генерирует столько записей, сколько находит совпадений.</p> </li> <li> <p>Если с помощью функции <span>SubFieldRegEx()</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> |

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

| Пример | Результат |
| --- | --- |
| `SubFieldRegEx('a,b c;1 2,3',' \|,\|;', 1)` | Возвращает `a`. В этом примере указаны три разделительных символа (пробел, запятая и точка с запятой). |
| `SubFieldRegEx('a;b;c;1;2;3',';', 2)` | Возвращает `b`. В этом случае задан только один символ-разделитель (точка с запятой). |
| `SubFieldRegEx('a,b c;1 2,3',' \|,\|;', 4)` | Возвращает `1`. |

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

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

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

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

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

Обзор

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

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

* Таблица `Transaction_By_Tag`, которая изначально содержит данные о транзакциях. Эти данные обрабатываются для извлечения отдельных значений тегов в новые записи.

* Создание поля `TransactionTag` для хранения значений извлеченных тегов.

В поле с тегами транзакций содержится несколько тегов в текстовых строках с разделителями. Разделителем может быть любой из следующих символов: , | ;

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

```
Transaction_By_Tag:

Load SubFieldRegEx(Tags, ',|;|\|') as TransactionTag,
* Inline [
ID	Product	Tags	Amount
1	Product A	Special order,Eligible for return,Warranty included	100.93
2	Product B	Ineligible for return|No warranty available	51.11
3	Product C	No warranty available	12.83
4	Product B	Special order;Liquidation sale;Warranty included	209.48
] (delimiter is '\t');

drop fields Tags;
```

Результаты

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

* `ID`

* `Product`

* `TransactionTag`

Таблица результатов

| ID | Product | TransactionTag |
| --- | --- | --- |
| 1 | Product A | Eligible for return |
| 1 | Product A | Warranty included |
| 1 | Product A | Special order |
| 2 | Product B | No warranty available |
| 2 | Product B | Ineligible for return |
| 3 | Product C | No warranty available |
| 4 | Product B | Liquidation sale |
| 4 | Product B | Special order |
| 4 | Product B | Warranty included |

Этот пример демонстрирует, что при использовании скрипта загрузки SubFieldRegEx() возвращает отдельную строку для каждого совпадения, найденного во входной строке.

## Пример 2: выражения диаграммы для разделения тегов по транзакциям

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

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

Обзор

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

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

* Таблица `Transaction_By_Tag`, которая содержит данные о транзакциях.

* Поле `Tags`, содержащее текстовые строки для хранения всех тегов, связанных с транзакцией.

Требования:

* В поле с тегами транзакций содержится несколько тегов в текстовых строках с разделителями. Разделителем может быть любой из следующих символов: , | ;

* Требуется использовать выражения диаграммы для выделения каждого тега в отдельное поле, при этом в транзакцию можно будет добавить до трех меток.

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

```
Transaction_By_Tag:

Load * Inline [
ID	Product	Tags	Amount
1	Product A	Special order, Eligible for return, Warranty included	100.93
2	Product B	Ineligible for return | No warranty available	51.11
3	Product C	No warranty available	12.83
4	Product B	Special order;Liquidation sale;Warranty included	209.48
] (delimiter is '\t');
```

Результаты

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

* `ID`

* `Tags`

Добавьте эти вычисляемые измерения:

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 1)`

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 2)`

* 

  `=SubFieldRegEx(Tags, ',|;|\|', 3)`

Таблица результатов

| ID | Tags | =SubFieldRegEx(Tags, ',\|;\|\\|', 1) | =SubFieldRegEx(Tags, ',\|;\|\\|', 2) | =SubFieldRegEx(Tags, ',\|;\|\\|', 3) |
| --- | --- | --- | --- | --- |
| 1 | Special order, Eligible for return, Warranty included | Special order | Eligible for return | Warranty included |
| 2 | Ineligible for return \| No warranty available | Ineligible for return | No warranty available | - |
| 3 | No warranty available | No warranty available | - | - |
| 4 | Special order;Liquidation sale;Warranty included | Special order | Liquidation sales | Warranty included |

## Подробнее

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