негативный взгляд на особую комбинацию символов в RegEx - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь добавить \s+ вокруг специальных символов, за исключением << или >>. Например, << ) < <? ? должно стать << \s+)\s+ \s+<\s+ \s+<?\s+ \s+?\s+

Я использую ^[\w\s]+ для захвата несловесных символов, кроме пробелов, но мне кажется, что я не могу заставить работать отрицательный вид. Любая помощь?

Это то, что я пытаюсь в SAS:

Data _NULL_;
a = prxchange("s/(?!(<<|>>)(^[\w\s]+)/\s*$1\s*/", -1,"<< ) < <? ?");
putlog a;
run;

1 Ответ

1 голос
/ 20 февраля 2020

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

"s/(?<!\S)(?!(?:<<|>>)(?!\S))([^\w\s]+)(?!\S)/\s+$1\s+/"

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

  • (?<!\S) - граница пробелов с левой стороны
  • (?!(?:<<|>>)(?!\S)) - a Отрицательное предположение, которое не соответствует совпадению, если непосредственно справа есть << или >>, за которым следует пробел
  • ([^\w\s]+) - один или несколько символов, отличных от слова и пробела
  • (?!\S) - правая граница пробела.
...