TCL语言中删除特定字符前所有内容的实现方法
TCL实现删除字符串中指定字符前所有内容
现有输入字符串4567-ABC,需要删除-字符之前的所有内容,最终输出ABC,可通过以下几种常用方式实现:
方法1:通过字符串索引定位截取
先使用string first定位-的首次出现位置,再用string range截取该位置之后的内容,执行效率高,适合处理大字符串场景,示例代码如下:set input_str "4567-ABC" # 获取'-'首次出现的索引,不存在时返回-1 set dash_index [string first "-" $input_str] # 无'-'直接返回原串,否则从'-'的下一位开始截取到末尾 set result [expr {$dash_index == -1 ? $input_str : [string range $input_str [incr dash_index] end]}] puts $result运行后输出结果为
ABC。方法2:通过字符串拆分拼接实现
用split按-拆分字符串为列表,取列表第一个元素之后的所有内容重新拼接,该方法可以保留-之后出现的所有-字符,适用性更强:set input_str "4567-ABC" set str_list [split $input_str "-"] set result [join [lrange $str_list 1 end] "-"] puts $result若输入为
4567-AB-C-DEF,该方法会输出AB-C-DEF。方法3:通过正则替换实现
用正则匹配从字符串开头到第一个-的所有内容,替换为空即可,写法更简洁:set input_str "4567-ABC" regsub {^.*?-} $input_str "" result puts $result正则中
^匹配字符串开头,.*?为非贪婪匹配,保证只匹配到第一个-为止。
内容的提问来源于stack exchange,提问作者Iron Man
相关产品推荐
相关产品推荐

