我正在编写一个实用程序(恰好是在 python 中),它以 TCL 脚本的形式生成输出。给定 python 中的一些任意字符串变量(不是 unicode),我想生成一个 TCL 行,例如
set s something
...这将设置 TCL 变量's
' 到那个确切的字符串,无论其中有什么奇怪的字符。在不变得太奇怪的情况下,我不想让输出变得比需要的更混乱。我相信一个不错的方法是
如果字符串不为空并且仅包含字母数字,以及一些字符,例如.-_
(但绝对不是$"{}\
)然后就可以按原样使用;
如果它只包含可打印字符并且没有双引号或大括号(并且不以反斜杠结尾),那么只需输入{}
周围;
否则,将""
使用后周围\
逃避"
{
}
\
$
[
]
, and \nnn
非打印字符的转义。
问题:这是需要在双引号内转义的完整字符集吗?我在文档中找不到这个。我是否错过了什么(例如,我几乎错过了 (2) 的字符串不能以 \ 结尾)。
我知道还有很多其他字符串可以引用{}
,但似乎很难轻易识别它们。另外,如果您不介意非打印字符(特别是换行符)出现在 TCL 输出中,则 (2) 似乎是可以的。
你真的只需要 2 条规则,
您无需担心换行符、不可打印字符等。它们在文字字符串中有效,并且 TCL 具有出色的 Unicode 支持。
set s {
this is
a
long
string. I have $10 [10,000 cents] only curly braces \{ need \} to be escaped.
\t is not a real tab, but ' ' is. "quoting somthing" :
{matchin` curly braces are okay, list = string in tcl}
}
Edit根据您的评论,您可以执行以下操作:
- escape
[]
{}
and $
- 将整个输出包装在
set s [subst { $output } ]
Tcl 的优点在于它的语法非常简单。除上述3个字符外,没有其他字符需要转义。
Edit 2最后一次尝试。
如果你通过了subst
有些选择,你只需要逃避\
and {}
set s [subst -nocommands -novariables { $output } ]
然而,您需要提出一个正则表达式来将不可打印字符转换为其转义代码。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)