IndexRegEx() выполняет поиск во входной строке и возвращает начальную позицию n-го вхождения указанного шаблона регулярного выражения. Дополнительный третий аргумент count определяет значение n (1, если опущен). Позиции в строке нумеруются слева направо от 1 и далее. Если совпадение не найдено, функция возвращает 0.
Эта функция выполняет операции с регулярными выражениями, чувствительные к регистру. В качестве альтернативы можно использовать вариант IndexRegExI() для выполнения операций с регулярными выражениями без учета регистра.
Синтаксис:
IndexRegEx
(text, regex [, count])
Возвращаемые типы данных: целое
Аргументы
Аргумент
Описание
text
Текст входной строки, в которой требуется выполнить поиск регулярного выражения.
regex
Регулярное выражение, которое будет использоваться для поиска входной строки.
count
Номер совпадения. Это полезно, когда в тексте может быть найдено несколько совпадений с регулярным выражением. Например, укажите значение 4, чтобы извлечь позицию четвертого совпадения.
Данный аргумент является необязательным. Если значение на задано, по умолчанию используется 1. Можно указать отрицательное значение для поиска совпадений справа налево.
Примеры функции
Пример
Результат
IndexRegEx('abc123','[a-z][0-9]+')
Возвращает 3 (начальная позиция первого совпадения).
IndexRegEx('abc123','[a-z][0-9]+',2)
Возвращает 0 (регулярное выражение не имеет второго совпадения).
IndexRegEx('ABC123','[a-z][0-9]+')
Возвращает 0, поскольку IndexRegEx() учитывает регистр.
IndexRegExI('ABC123','[a-z][0-9]+')
Возвращает 3. Используется вариант функции IndexRegExI() без учета регистра.
Когда это следует использовать
Эта функция может использоваться в следующих случаях:
Определение, где в больших объемах текста встречаются специфические текстовые шаблоны. Например, может потребоваться узнать, где шаблон адреса электронной почты используется в серии длинных электронных сообщений.
Функция IndexRegEx() особенно полезна для расширенной обработки данных и обычно используется на первом этапе более длительного и сложного преобразования. Обычно проще решать задачи с помощью других функций regex, таких как ExtractRegEx(), MatchRegEx() и CountRegEx(), но могут быть случаи, когда IndexRegEx() предлагает решения, которые не могут обеспечить эти функции.
Пример 1: скрипт загрузки для идентификации книг по ISBN
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Таблица с именем ISBN, которая содержит текст сообщения электронной почты в поле с именем EmailBody.
Требуется найти позиции всех 13-значных кодов ISBN в тексте на естественном языке в сообщении электронной почты.
Скрипт загрузки
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD IndexRegEx(EmailText,'$(ISBN_RegEx)',1) AS ISBNCode1,
IndexRegEx(EmailText,'$(ISBN_RegEx)',2) AS ISBNCode2,
IndexRegEx(EmailText,'$(ISBN_RegEx)',3) AS ISBNCode3,
* INLINE `
EmailText
Hi there! I have some books that I'm interested in ordering from your distribution center. Just wanted to make sure they were in stock before I put the order in on the system - do you think you could tell me whether you have these in stock, and how many you might be able to ship us? Thanks! Item 1: ISBN 123-3-1234-1234-0. This is one I've had a really hard time getting a hold of lately. Do you think you would have 5 in stock? If not, can I put a hold on the next 5 you get? Item 2: ISBN 012-2-0123-0123-4 ... This one is not high-priority, but if you have one, I'll take it! Item 3: ISBN 000-1-0123-0123-2. Customers have been requesting this one for a long time, and we haven't had it in stock for years due to it being out of print. Any chance you might have 7 of them? Thanks!
` (delimiter is '/t/';
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
ISBNCode1
ISBNCode2
ISBNCode3
Таблица результатов
ISBNCode1
ISBNCode2
ISBNCode3
301
487
588
Пример 2: выражение диаграммы для идентификации контактов с дополнительными телефонными номерами
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Таблица с именем BusinessContactInfo, содержащая информацию о компаниях, которая была найдена на веб-сайте каждой компании.
ContactInfo ― это поле, содержащее телефонные номера компаний. Требуется определить, у каких компаний есть несколько телефонных номеров.
Требования:
Телефонные номера должны быть телефонными номерами стандарта NANP (Североамериканский план телефонной нумерации), состоящими из 10 цифр.
Требуется разрешить заключение код региона в скобки.
Требуется разрешить один пробел или дефис между каждым сегментом телефонного номера.
Скрипт загрузки
BusinessContactInfo:
Load * Inline `
ID CompanyName ContactInfo
1 Company A (123) 456-7890 (023) 123-4567
2 Company B 0123456790 1357913579 0246802468
3 Company C 234-567-8901
` (delimiter is '\t');
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:
Company A имеет один дополнительный телефонный номер. Company B имеет два дополнительных телефонных номера. Company C имеет три дополнительных телефонных номера.
Примечание к информацииФункция MatchRegEx() также полезна для следующих случаев проверки.
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!