在 TCL 中查找和删除特殊字符

find and delete special characters in TCL

我有特殊字符:

abc[1]

我想要找到模式 [:number:] 我希望它变成

abc_1_

如何找到模式[:number:] 我尝试使用 string match "*[*" $list。但它不活跃

string match 命令并不是真正适合这项工作的工具。它不会告诉您它在哪里匹配的东西,[是它的小匹配语言中的元字符(用于引入*的限制形式)。

在你的情况下,你最好使用 regsub:

regsub {\[(\d+)\]} $inputString {__}

例如:

puts [regsub {\[(\d+)\]} {abc[1]} {__}]

RE 本身是这样的:\[(\d+)\]。这是一个文字 [(反斜杠引号,因为它是 RE 元字符)、一个或多个数字的捕获子序列,以及一个文字 ](带反斜杠引号)。替代替换是 __,一对 _ 个字符,第一个(也是唯一一个)捕获的子序列位于它们之间。

如果一次要在一个字符串中进行多次替换,您可能需要 -all 选项才能 regsub


如果您希望摆脱一般的问题字符,regsub 是正确的方法。但是,可能需要一些操作才能获得正确的 RE。虽然有一些简化......

puts [regsub -all {\W+} {abc[1]} "_"]

那个实际上并没有按照你的要求去做......但它更像是许多人在这个领域提出问题时想要的,因为它改变了非所有序列- 字母数字字符转换为单个下划线(模数 _ 本身有点奇怪)。