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}”