在Tcl列表元素中,引号后接“中”)&引用;而不是空间
这个问题可能是问题的重复,但我面临的问题与答案无关。我尝试了人们在那里发布的代码,但我无法实现我想要的。 我的代码: 上面的代码不工作,但在我包含{}在Tcl列表元素中,引号后接“中”)&引用;而不是空间,tcl,regsub,Tcl,Regsub,这个问题可能是问题的重复,但我面临的问题与答案无关。我尝试了人们在那里发布的代码,但我无法实现我想要的。 我的代码: 上面的代码不工作,但在我包含{} set line {H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")} 它是这样工作的 H_Dev: Issue with DELETE funtion in OSPF OC Input List is m
set line {H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")}
它是这样工作的
H_Dev: Issue
with DELETE
funtion in
OSPF OC
Input List
is missing
required key
identifier
但在我的脚本中,$行仅在列表中。如何获得这样的纯文本
H_Dev: Issue with DELETE funtion in OSPF OC Input List is missing required key identifier
问题在于这一行:
set line H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")
由于您没有引用任何内容,因此将许多参数传递给set
(这会出错,因为它不接受那么多参数),或者除了“标识符”)
看起来像是一个双引号的单词,只是因为关闭后的)
“
这就是错误的原因
通常的修复方法是对整个字符串加双引号(在任何内部双引号之前加反斜杠):
或者把所有的东西都放在支架上(这样做很容易):
要仅获取所需的单词,可以使用
string map
删除不需要的字符,regsub-all
删除不需要的字符,或regexp-all-inline
选择所需的单词
备选方案一:
set line [string map {{"} {} ( {} ) {}} $line]
备选方案二:
set line [regsub -all {[("")]} $line ""]
备选方案三:
set line [regexp -all -inline {[\w]+:?} $line]
我倾向于选择我想要的单词,而不是过滤我不想要的字符,因为这对于意外的输入就不那么令人惊讶了。其他人不同意我的观点。问题在于这一行:
set line H_Dev: Issue with DELETE funtion in OSPF OC (Input List is missing required key "identifier")
由于您没有引用任何内容,因此将许多参数传递给set
(这会出错,因为它不接受那么多参数),或者除了“标识符”)
看起来像是一个双引号的单词,只是因为关闭后的)
“
这就是错误的原因
通常的修复方法是对整个字符串加双引号(在任何内部双引号之前加反斜杠):
或者把所有的东西都放在支架上(这样做很容易):
要仅获取所需的单词,可以使用
string map
删除不需要的字符,regsub-all
删除不需要的字符,或regexp-all-inline
选择所需的单词
备选方案一:
set line [string map {{"} {} ( {} ) {}} $line]
备选方案二:
set line [regsub -all {[("")]} $line ""]
备选方案三:
set line [regexp -all -inline {[\w]+:?} $line]
我倾向于选择我想要的单词,而不是过滤我不想要的字符,因为这对于意外的输入就不那么令人惊讶了。其他人不同意我的观点。如果您想使用“set”命令将字符串分配给变量,那么您的字符串周围需要大括号(或引号,在您的情况下,大括号不起作用,因为字符串中有引号)。如果没有大括号,则会向“set”命令传递太多参数。问题是:
foreach {name value} [string map {( { } ) {} } $line] {
puts "$name $value"
}
这是一次遍历字符串两个单词,将它们分配给变量“name”和“value”,并在一行上打印每一对。如果只想打印整个字符串,请去掉foreach行并执行以下操作:
puts $line
如果您还试图去掉括号和括号(这是代码中的样子),您可以这样做:
puts [string map {( { } ) {} } $line]
如果要使用“set”命令将字符串赋给变量,则在字符串周围需要大括号(或引号,在您的情况下,大括号不起作用,因为字符串中有引号)。如果没有大括号,则会向“set”命令传递太多参数。问题是:
foreach {name value} [string map {( { } ) {} } $line] {
puts "$name $value"
}
这是一次遍历字符串两个单词,将它们分配给变量“name”和“value”,并在一行上打印每一对。如果只想打印整个字符串,请去掉foreach行并执行以下操作:
puts $line
如果您还试图去掉括号和括号(这是代码中的样子),您可以这样做:
puts [string map {( { } ) {} } $line]