Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 查找和删除TCL中的特殊字符_Linux_Tcl - Fatal编程技术网

Linux 查找和删除TCL中的特殊字符

Linux 查找和删除TCL中的特殊字符,linux,tcl,Linux,Tcl,我有特殊的性格: abc[1] 我想找到模式[:number://code>,我想让它变成 abc_1_ 如何查找模式[:number:][/code> 我试着使用字符串匹配“*[*”$list。但是它不是活动的字符串匹配命令并不是这个工作的正确工具。它不会告诉你它在哪里匹配,而且[是一个元字符,在它的小匹配语言中(用于引入*的受限形式) 在您的情况下,最好使用regsub: regsub {\[(\d+)\]} $inputString {_\1_} 例如: puts [regsub {

我有特殊的性格:

abc[1]
我想找到模式
[:number://code>,我想让它变成

abc_1_
如何查找模式
[:number:][/code>

我试着使用
字符串匹配“*[*”$list
。但是它不是活动的字符串匹配
命令并不是这个工作的正确工具。它不会告诉你它在哪里匹配,而且
[
是一个元字符,在它的小匹配语言中(用于引入
*
的受限形式)

在您的情况下,最好使用
regsub

regsub {\[(\d+)\]} $inputString {_\1_}
例如:

puts [regsub {\[(\d+)\]} {abc[1]} {_\1_}]
RE本身是这样的:
\[(\d+)\]
。这是一个literal
[
(反斜杠引用,因为它是RE元字符)、一个或多个数字的捕获子序列和literal
]
(带反斜杠引号)。替换为
\u1
,一对
字符和第一个(且仅一个)字符捕获了它们之间的子序列

如果一个字符串中同时有许多替换项,则可能需要
-all
选项来执行
regsub


如果您希望从总体上消除问题字符,
regsub
是正确的方法。但是,要获得正确的re可能需要一些修改。不过,经过一些简化

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

这一个实际上并不能满足你的要求……但它更像是许多人在这一领域提问时所希望的,因为它将所有非字母数字字符序列都变成了单下划线(用
\uuuu
本身模化有点奇怪)。

如果输入是任何数字,我该怎么做?例如:abc[2]abc[3]。我的目的是将“[”和“]”改为“undercore”
\d+
的意思是“一个或多个数字”,这样Donal的答案对你有用。我的意思是“{\1}”