如何在分割一个字符串时忽略连续的空格或制表符
推荐于2016-02-18 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
假设现在我们有一个字符串line1。该字符串含有四个域,分别是a、b、c和d。a的左边有一个空格,a和b之间有一个空格,b和c之间有两个空格,c和d之间有一个空格和一个制表符,d的右边有一个制表符。如下所示:
[cpp] view plaincopy
% set line1 " a b c /td/t"
a b c d
% string length $line1
11
就如你已经知道的,如果直接用split命令将line1分割,返回的列表长度将会是8:
[cpp] view plaincopy
% set fields1 [split $line1]
{} a b {} c {} d {}
% llength $fields1
8
如果想要返回的列表只包含a、b、c和d这四个元素,那么可以采用以下办法:
首先将line1首尾的空白字符去除,得到line2字符串:
[cpp] view plaincopy
% set line2 [string trim $line1]
a b c d
% string length $line2
9
然后用regsub命令将line2中连续的空格或制表符替换为一个制表符(或一个空格),得到line3字符串:
[cpp] view plaincopy
% regsub -all {[[:blank:]]+} $line2 "/t" line3
3
% puts $line3
a b c d
% string length $line3
7
最后对line3进行分割即可:
[cpp] view plaincopy
% set fields [split $line3]
a b c d
% llength $fields
4
[cpp] view plaincopy
% set line1 " a b c /td/t"
a b c d
% string length $line1
11
就如你已经知道的,如果直接用split命令将line1分割,返回的列表长度将会是8:
[cpp] view plaincopy
% set fields1 [split $line1]
{} a b {} c {} d {}
% llength $fields1
8
如果想要返回的列表只包含a、b、c和d这四个元素,那么可以采用以下办法:
首先将line1首尾的空白字符去除,得到line2字符串:
[cpp] view plaincopy
% set line2 [string trim $line1]
a b c d
% string length $line2
9
然后用regsub命令将line2中连续的空格或制表符替换为一个制表符(或一个空格),得到line3字符串:
[cpp] view plaincopy
% regsub -all {[[:blank:]]+} $line2 "/t" line3
3
% puts $line3
a b c d
% string length $line3
7
最后对line3进行分割即可:
[cpp] view plaincopy
% set fields [split $line3]
a b c d
% llength $fields
4
百事牛
2024-10-22 广告
2024-10-22 广告
百事牛是共享提供商,我们提供可靠有效的服务,适当合理的授权费有利于的继续更新优化。同样的事情,同样的方法,百事牛团队十年磨一剑,始终至聚焦在密码恢复领域,深耕于此,我们已研制出有别于其他公司的算法和运算模式, 百事牛的暴力模式加入了分布式点...
点击进入详情页
本回答由百事牛提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询