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

Я добавил в свою новую книгу (третье издание Методы очистки данных с использованием SAS) главу с описанием этой темы. В качестве примера рассмотрим программу, которую можно использовать для проверки канадских почтовых индексов с помощью регулярных выражений. Этот почтовый индекс имеет следующий вид:

LDLDLD или LDL DLD,

где 'L' — буква, 'D' — цифра. Существуют некоторые правила о том, какие буквы можно использовать в первой, третьей и пятой позиции, но пока мы будем игнорировать их.

Регулярное выражение начинается и заканчивается разделителем (обычно это косая черта /). Например, регулярное выражение, соответствующее слову 'cat', будет выглядеть так: /cat/. Это довольно просто. Конечно, если вы ищете кота (вчера мы не смогли найти нашего кота Микки, но затем нашли его без использования регулярных выражений), то скорее всего будет использовать функцию FIND, которая ищет строки. Мощь регулярных выражений состоит в том, что вы можно указать классы символьных данных, такие как все буквы или все цифры. Регулярное выражение, соответствующее канадскому почтовому индексу (без пробела в середине) будет таким:

/([A-Z]\d){3}/

Буквы в квадратных скобках соответствуют всем прописным буквам, выражение '\d' соответствует любой цифре. {3} — оператор повторения, который говорит, чтобы повторить последовательность букв и цифру три раза.

Как же использовать регулярные выражения в программах SAS? Взгляните:

title "Testing for Valid Canadian Postal Codes";
data _null_;
   input Code $;
   file print;
   if prxmatch("/([A-Z]\d){3}/",Code) eq 0 then 
      put "Error: the code " Code "is not valid.";
datalines;
A1B2C3
123456
 B2N3M4
X7X6S5
ABCDEF
;

Функция PRXMATCH похожа на функцию FIND. Первый аргумент — это регулярное выражение, второй аргумент — строка, которую вы обрабатываете. Если найден шаблон, который соответствует регулярному выражению, то функция возвращает начальную позицию шаблона. Если шаблон не найден, функция возвращает 0. Вот результат запуска этого шага DATA:

Помните, что если шаблон, который вы проверяете, состоит только из цифр или только из букв, то в SAS есть группа функций для проверки такого шаблона (функции NOT). Например, с помощью функции NOTDIGIT можно проверить, есть ли в строке символ, отличный от цифры. Другие две удобные функции NOT — NOTALPHA, которая ищет символы, отличные от букв, и NOTALNUM, которая определяет, что значение не является буквенно-цифровым

Оригинал статьи на английском