TCL regsub несколько специальных символов в одном кадре - PullRequest
0 голосов
/ 07 июня 2019

Есть ли способ добавить escape '\' в строку с несколькими специальными символами?

Пример ввода: a/b[1]/c/d{3}
Желаемый результат: a\/b\[1\]\/c\/d\{3\}

Я сделал это в нескольких regsubs по одному специальному символу за раз. Но есть ли способ сделать это одним выстрелом?

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Я бы просто экранировал все несловарные символы:

set input {a/b[1]/c/d{3}}
set output [regsub -all {\W} $input {\\&}]
puts $output
a\/b\[1\]\/c\/d\{3\}

ref: https://tcl.tk/man/tcl8.6/TclCmd/regsub.htm и https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm

0 голосов
/ 07 июня 2019

Общий подход к использованию заключается в создании набора символов RE ([…]) и его использовании.В некоторых случаях вы должны быть немного осторожнее с ними (некоторые символы в них особенные, особенно ^, ], - и \), но это не так уж сложно.

regsub -all {[][/{}]} $input {\\&}

Однако, если вы можете использовать классы символов (например, \W или [^\w]), тогда это будет намного проще и проще для чтения.Наиболее распространенные случаи необходимости применять обратную косую черту работают с ними.

...