字符串映射中的tcl正则表达式

时间:2014-09-17 14:57:51

标签: regex map tcl

我有一个模板,我想将其转换为tex文件。例如,包含点和字母的每个章节和部分我想用反斜杠和字母替换它。我知道我可以尝试使用regsub,但我真的想用字符串映射来尝试它,这里的代码不起作用:

set main \
{
.chapter{Assignment 1}
.section{1a}
}
set main [string map {.({^[A-Za-z]+$})\1 \\\1} $main]

更容易做到:

set main [string map {.c \\c} $main]
set main [string map {.s \\s} $main]

但我只是想尝试使用{any letter thingy}并知道是否可以使用string map命令。

1 个答案:

答案 0 :(得分:2)

根据string map manual entry,此命令不采用正则表达式。字符串映射采用一个简单的字符串列表,以匹配要替换的值。它有一个-nocase选项来启用与案例无关的匹配,但这就是全部。但是,您可以拥有多对,例如:

string map {.c \\c .s \\s} $value

如果需要,您还可以使用普通的Tcl脚本来构建更复杂的对列表,因为该映射只是一个列表。如果您想要或需要使用正则表达式,那么您必须使用regsub。