如何使用Tcl将字符串中被单引号包裹的内容拆分为独立单词
Tcl 拆分单引号包裹字符串的实现方案
需求场景
需要将以下Tcl字符串中被单引号包裹的独立内容拆分为3个独立元素:
set str {'Name' 'Karna Mayer' ''}
拆分后的预期结果为三个元素:Name、Karna Mayer、空字符串。
实现方法
方法1:正则匹配提取(推荐,兼容性更强)
直接用正则表达式匹配所有单引号包裹的内容,提取引号内的有效部分:
set str {'Name' 'Karna Mayer' ''} # -all 匹配所有符合规则的内容,-inline 直接返回匹配结果 set match_res [regexp -all -inline {'([^']*)'} $str] # 遍历匹配结果,跳过完整匹配项,只保留捕获到的引号内内容 set parts [lmap {full_match inner_content} $match_res {set inner_content}]
验证结果:执行llength $parts会返回3,lindex $parts 0得到Name,lindex $parts 1得到Karna Mayer,lindex $parts 2得到空字符串,完全符合需求。
方法2:字符替换转列表
利用Tcl列表的格式特性,替换单引号为双引号后直接转换为列表:
set str {'Name' 'Karna Mayer' ''} # 将所有单引号替换为双引号,转换为合法Tcl列表 set temp_list [string map {' "} $str] # 去除每个元素外层的双引号得到最终结果 set parts [lmap elem $temp_list {string trim $elem '"'}]
内容的提问来源于stack exchange,提问作者Karan Nayyar
相关产品推荐
相关产品推荐

