IndexRegExGroup() выполняет поиск во входной строке и возвращает начальную позицию n-го вхождения указанного шаблона составного регулярного выражения. Дополнительный третий аргумент count определяет значение n (1, если опущен). Позиции в строке нумеруются слева направо от 1 и далее. Если совпадение не найдено, функция возвращает 0.
Эта функция выполняет операции с регулярными выражениями, чувствительные к регистру. В качестве альтернативы можно использовать вариант IndexRegExGroupI() для выполнения операций с регулярными выражениями без учета регистра.
Синтаксис:
IndexRegExGroup
(text, regex, group [, count])
Возвращаемые типы данных: целое
Аргументы
Аргумент
Описание
text
Текст входной строки, в которой требуется выполнить поиск регулярного выражения.
regex
Регулярное выражение, которое будет использоваться для поиска входной строки.
group
Номер группы в случае составного регулярного выражения.
Значение group=0 возвращает индекс всего регулярного выражения. Однако если регулярное выражение должно возвращать только индекс всего совпадения, используйте вместо этого функцию IndexRegEx().
Можно указать отрицательное значение group для поиска совпадений справа налево.
count
Номер совпадения. Это полезно, когда в тексте может быть найдено несколько совпадений с регулярным выражением. Например, укажите значение 4, чтобы найти позицию четвертого совпадения.
Данный аргумент является необязательным. Если значение на задано, по умолчанию используется 1. Можно указать отрицательное значение для поиска совпадений справа налево.
Примеры функции
Пример
Результат
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
Возвращает 3 (начальную позицию полного регулярного выражения).
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
Возвращает 3 (начальная позиция первой группы).
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
Возвращает 4 (начальная позиция второй группы). Во входном шаблоне регулярного выражения строка ([0-9]+) соответствует второй группе.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Возвращает 0, поскольку IndexRegExGroup() учитывает регистр.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Возвращает 3. Используется вариант функции IndexRegExI() без учета регистра.
Когда это следует использовать
Эта функция может использоваться в следующих случаях:
Определение, где в больших объемах текста встречаются специфические текстовые шаблоны. Например, может потребоваться узнать, где домен адреса электронной почты используется в серии длинных сообщений электронной почты.
Функция IndexRegExGroup() особенно полезна для расширенной обработки данных и обычно используется на первом этапе более длительного и сложного преобразования. Обычно проще решать задачи с помощью других функций regex, таких как ExtractRegExGroup(), MatchRegEx() и CountRegEx(), но могут быть случаи, когда IndexRegExGroup() предлагает решения, которые не могут обеспечить эти функции.
Пример 1: скрипт загрузки для поиска позиций компонентов ISBN
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Создание переменнойISBN_RegEx для хранения регулярного выражения, которое требуется использовать.
Набор кодов ISBN для книг, которые книжный магазин хочет заказать у нескольких поставщиков.
Для каждого кода ISBN нужно извлечь начальную позицию каждого из следующих компонентов:
EAN (Европейский номер товара)
Группа
Регистрант
Публикация
Контрольная сумма
Скрипт загрузки
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD Supplier,
IndexRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
IndexRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
IndexRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
IndexRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
IndexRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
Supplier
EAN
Group
Registrant
Publication
Checksum
Таблица результатов
Supplier
EAN
Group
Registrant
Publication
Checksum
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
В этом случае каждая книга содержит компоненты в одинаковых позициях.
Пример 2: выражение диаграммы для поиска позиций URL (со сравнением IndexRegEx())
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Таблица с именем Correspondence, которая содержит текст сообщения электронной почты в поле с именем EmailBody.
Содержимое сообщений электронной почты, где есть URL-адреса веб-сайтов.
Требуется найти позицию второго URL, если он есть, а также позиции следующих компонентов:
Домен
Путь
Требуется использовать одно регулярное выражение для выполнения всех операций.
Скрипт загрузки
Correspondence:
Load * Inline `
ID EmailBody
1 Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2 Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3 Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!
` (delimiter is '\t');
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:
IndexRegEx() возвращает начальную позицию полного URL-адреса, в то время как IndexRegExGroup() возвращает начальные позиции отдельных частей URL в соответствии с использованным значением group. Запись со значением ID, равным 2, содержит только один URL, поэтому для нее возвращаются значения 0.
Одно и то же регулярное выражение используется во всех выражениях диаграммы для возврата различной информации. Разбивка групп, определенных в регулярном выражении, выглядит следующим образом.
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!