Вы можете использовать string map
:
# Just generating the replacements, we want to have "A Z B Y C X ... 0 9 ... 9 0"
set letters "ABCDEFGHIJKLMNOPQRSTUYWXYZ"
set numbers "0123456789"
set replacements {}
foreach l [split $letters ""] r [split [string reverse $letters] ""] {
lappend replacements $l $r
}
foreach n [split $numbers ""] r [split [string reverse $numbers] ""] {
lappend replacements $n $r
}
# string map in use:
set input "MEW2"
set output [string map -nocase $replacements $input]
# NYD7
Проблема с regsub заключается в том, что вы не можете легко указать ему заменить что-то, что соответствует чему-то конкретному c, вам придется создать отдельную процедуру и выполнить дальнейшие замены. Чтобы упростить задачу, просто используйте карту строк, которая предназначена для такой замены.