有没有办法使用regsub进行多次替换?

Nat*_* Pk 1 regex tcl

是否可以使用regsub在表达式中进行不同的替换?

例:

set a ".a/b.c..d/e/f//g"
Run Code Online (Sandbox Code Playgroud)

现在,在该表达式中,是有可能取代" ."为" yes"" .."为" no"" /"为" true"" //"如" false在一个单一的regsub命令"?

Don*_*ows 8

有了regsub,没有.有对这样的事情(这需要与比赛信息评估命令的结果替换)一个长期的功能需求,但它没有采取行动日期.

string map在这种情况下,你可以用你想做的事情:

set a ".a/b.c..d/e/f//g"
set b [string map {".." "no" "." "yes" "//" "false" "/" "true"} $a]
puts "changed $a to $b"
# changed .a/b.c..d/e/f//g to yesatruebyescnodtrueetrueffalseg
Run Code Online (Sandbox Code Playgroud)

请注意,在构建映射时,如果任何from-value是另一个的前缀,则应首先放置较长的from-value.(这是因为string map实现会检查哪些更改按照您在其中列出的顺序进行...)


可以在两个步骤中使用regsubsubst进行多目标替换,但除了非常复杂的情况之外,我不建议使用它!一个不错string map的东西更容易使用.