Tcl regsub 将所有字母表的其他字符替换为另一个字符
Tcl regsub substitute other character to another for all alphapets
我需要在给定原始字符串的情况下生成相同长度的随机输出字符串。我正在尝试以下方法:
regsub -all -nocase ABCDEFGHIJKLMNOPQRSTUYWXYZ0123456789 ZYXWYUTSRQPONMLKJIHGFEDCBA9876543210 $str
但输出始终与变量 str 的值无关:
ZYXWYUTSRQPONMLKJIHGFEDCBA9876543210
我的要求是替换或替换 A 到 Z、B 到 Y .... 0 到 9 和 9 到 0?
我怎样才能做到这一点?
您可以使用 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 的问题是您不能轻易地告诉它替换映射到特定内容的内容,您必须创建一个单独的过程并进行进一步的替换。为了简单起见,只需使用为这种替换制作的字符串映射。
我需要在给定原始字符串的情况下生成相同长度的随机输出字符串。我正在尝试以下方法:
regsub -all -nocase ABCDEFGHIJKLMNOPQRSTUYWXYZ0123456789 ZYXWYUTSRQPONMLKJIHGFEDCBA9876543210 $str
但输出始终与变量 str 的值无关:
ZYXWYUTSRQPONMLKJIHGFEDCBA9876543210
我的要求是替换或替换 A 到 Z、B 到 Y .... 0 到 9 和 9 到 0? 我怎样才能做到这一点?
您可以使用 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 的问题是您不能轻易地告诉它替换映射到特定内容的内容,您必须创建一个单独的过程并进行进一步的替换。为了简单起见,只需使用为这种替换制作的字符串映射。