使用TCL(多个实例)将\ tag {contents}替换为其内容

时间:2015-01-07 15:14:41

标签: tcl

问题:有一个包含标签的字符串(在LaTeX中),我需要用内容替换 \ textbf {内容} 仅使用TCL和regexps(我有TCL v8.4)。标签在字符串中多次出现。

所以,这就是我所拥有的:

  

使用 \ textbf {cosine} 而不是 \ textbf {sine} 函数对于压缩至关重要,因为事实证明 \ textbf {less需要余弦函数来逼近典型信号}

这就是我想要的:

  

使用余弦而不是正弦函数对压缩至关重要,因为事实证明需要更少的余弦函数来逼近典型信号

我理解 regsub 中的I have to escape the special characters,但我找不到如何执行此操作。

这是我到目前为止所做的:

set project_contents {The use of \textbf{cosine} rather than \textbf{sine} functions is critical for compression, since it turns out that \textbf{fewer cosine functions are needed to approximate a typical signal}.}

set match [ regexp -all -inline  {\\textbf\x7B([^\x7D]*)\x7D} $project_contents ]
foreach {trash needed_stuff} $match {

regsub -- {\\textbf\{$trash\}} $project_contents   $needed_stuff    project_contents
}

找到标记文本(在$ trash中)和没有标记的文本(在$ needed_stuff中),但不替换它们。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您正在寻找的关键事项是RE需要位于{大括号}中,并且RE中的字面反斜杠和大括号需要反斜杠引用。您还希望在其中使用非贪婪量词,并-all选项regsub

set project_contents {The use of \textbf{cosine} rather than \textbf{sine} functions is critical for compression, since it turns out that \textbf{fewer cosine functions are needed to approximate a typical signal}.}
set plain_text_contents [regsub -all {\\textbf\{(.*?)\}} $project_contents {\1}]
puts $plain_text_contents

这会产生此输出:

The use of cosine rather than sine functions is critical for compression, since it turns out that fewer cosine functions are needed to approximate a typical signal.

这看起来像你想要的东西。