SAS: удалить дублированные выражения из заданного списка с помощью REGEX - PullRequest
1 голос
/ 04 мая 2020

Я хотел бы удалить дублированные выражения из заданной строки, используя код SAS. Каждое выражение отделяется пробелом и учитывает следующий REGEX /[AZ]_\dndom2 Event.\dndom2‹(.[az])?/.

Вот код:

data want;
text = "X_99.99.a X_99.99.a A_12.00 A_12.00 A_13.00 A_12.00 X_99.99.a";
do i=1 to countw(text);
Nondups=prxchange('s/\b(\w+)\s\1/$1/',-1,compbl(text));
end;
run;

Желаемый результат должен быть: Nondups = "X_99.99.a A_12.00 A_13.00"

Каким должно быть регулярное выражение для использования внутри функции prxchange?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 04 мая 2020

Вы можете использовать

Nondups=trim(prxchange('s/\s*([A-Z]_\d{2}\.\d{2}(?:\.[a-z])?)(?=.*\1)//',-1, text));

См. Демоверсию regex

Шаблон соответствует:

  • \s* - 0+ пробелы
  • ([A-Z]_\d{2}\.\d{2}(?:\.[a-z])?) - группа 1:
    • [A-Z] - прописная буква ASCII
    • _ - подчеркивание
    • \d{2} - две цифры
    • \. - точка (необходимо экранировать)
    • \d{2} - две цифры
    • (?:\.[a-z])? - необязательная группа, соответствующая 1 или 0 последовательностям . и строчная буква ASCII
  • (?=.*\1) - положительный прогноз, который требует любых 0+ символов, кроме символов разрыва строки, до максимально возможного значения, сохраненного в группе 1 сразу справа от текущего местоположения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...