Tcl输入解析:如何将带引号字符串作为单个列表项?
Tcl实现带引号的输入拆分需求
要实现将带双引号的输入内容作为单个列表项拆分,不能直接用split命令(它会拆分所有空格),可以借助正则表达式匹配符合要求的项,具体代码如下:
set cmd [string toupper [gets stdin]] # 匹配双引号包裹的内容或非空白连续字符 set items [regexp -all -inline {"[^"]*"|\S+} $cmd] # 去除每个项的首尾双引号 set items [lmap item $items {string trim $item "\""}]
代码说明:
regexp -all -inline:将所有匹配结果以列表形式返回,匹配规则优先识别双引号包裹的内容("[^"]*"),再识别非空白的连续字符(\S+)lmap + string trim:遍历匹配到的每个项,去掉首尾的双引号,让带引号的内容以纯文本形式成为单个列表项
测试输入"HELLO THERE" 1 2 3,最终items列表会包含HELLO THERE、1、2、3四个项,满足需求。
内容的提问来源于stack exchange,提问作者SparkyNZ
相关产品推荐
相关产品推荐

