我尝试使用正则表达式命令等:tcl如何在正则表达式输出中处理方括号?
IN: regexp -all -inline {\S+} "RR\[0\] in"
OUT:{RR[0]} in
但是,当存在在字符串中没有括号,输出格式是不同的。
IN: regexp -all -inline {\S+} "RR in"
OUT:RR in
为什么在第一种情况下第一个元素在大括号之间?
我尝试使用正则表达式命令等:tcl如何在正则表达式输出中处理方括号?
IN: regexp -all -inline {\S+} "RR\[0\] in"
OUT:{RR[0]} in
但是,当存在在字符串中没有括号,输出格式是不同的。
IN: regexp -all -inline {\S+} "RR in"
OUT:RR in
为什么在第一种情况下第一个元素在大括号之间?
问题是方括号在tcl中保留用于执行命令。
因此,评价发现每方括号中,包括由“分隔的字符串内。
因此,当它返回正则表达式匹配它把卷边支架,以保护被解释为包含的命令字符串。
即使这样,其结果仍然是一个字符串
例如,如果你这样做:
% set r [regexp -all -inline {\S+} "RR\[0\] in"]
{RR[0]} in
然后你从一个循环打印:
% foreach x $r { puts $x }
RR[0]
in
通过加入命令,你可以很容易地转换成任何类型的列表进入,当你需要一个字符串,避免与装饰功能中的括号去掉。
% puts [join $r ]
RR[0] in
或直接的元素:
% puts [join [lindex $r 0] ]
RR[0]
首先,按正确方式运行正则表达式时出现错误。它应该是:
regexp -all -inline {\S+} {RR[0] in}
随着串绕括号您在搜索由于方barckets被解释为命令,如果你一定要告诉TCL不作替换,和的方式来告诉它是一个。通过使用大括号。
这样说,当括号不存在时,当然,正则表达式不会找到它们。
谢谢。实际上,我的意思是在第一种情况下的“RR \ [0 \]”。为什么第一个元素在第一种情况下需要花括号 –
你问的是方括号,或者你在第一个命令返回的列表中看到大括号? – Mariano
对不起。我在问,为什么第一个元素在第一种情况下需要花括号? –