如何删除 tcl 变量值中不需要的字符?

How to remove unwanted characters in tcl variable value?

我提取了一个全名并将其存储到一个变量中。

以下仅供说明之用。实际上,变量 $a 是从日志文件中提取的。

喜欢

set a "John Doe"

问题是我无法确定提取的全名中是否有任何特殊字符。我基本上什么都试过了。

使用 trimleft、trimright 或 trim 作为尾随空格。这并没有解决问题。 还尝试打印 ASCII 代码值,但只能找到与全名中表示的代码相同的代码。

我需要一些关于如何继续并删除全名中不需要的字符的想法或建议。 唯一困扰我的是我不知道那些不需要的字符是什么。

如果没有对什么是“特殊字符”的 确切 定义,就很难提出任何具体的建议。但是,如果我们假设我们正在谈论将所有非字母数字字符序列转换为已定义的内容(例如 _),那么我们可以使用 regsub 来完成任务:

set b [regsub -all {\W+} $a "_"]

在你的例子中,它将 John Doe 变成 John_Doe。它还将 **{!John . . . %%'' '''(Doe)@@ 变成 _John_Doe_.


正则表达式 \W+ 匹配(最多)任何非单词(非字母数字)字符的非空序列。这对于清理很大一部分奇怪的用户输入非常有用。 (不过它对名字来说并不完美,正如 Patrick O'Brien 会告诉你的那样。名字很老套。)