多线串修剪

时间:2018-06-08 16:12:37

标签: tcl

我的问题字符串有多行:

line1 
Link1: //website/go/<example> 
line2

我正在尝试修剪以获得只是网页链接部分(只是地址可以是各种 - 在这种情况下是“// website / go /”)但是之前还有一些额外的标志之后。

我的尝试:

set temp [string map { " " "" "line1" "" "Link1: " "" "line2" "" } $output]
puts "found link : $temp

它的输出是:

found link :<empty line>
//website/go/<example>
<empty line>`  

如何删除所有空格,换行符等,并修改它以获得我正在寻找的字符串部分。在这种情况下,只需://website/go/<example>

1 个答案:

答案 0 :(得分:1)

鉴于此输入数据:

line1 
Link1: //website/go/<example> 
line2

您可以像以前一样使用string map,然后使用string trim对结果进行后期处理(假设您只希望在结尾处留下一件事)删除换行符与另一个映射元素。为清晰起见,在两行上:

set temp [string map { " " "" "line1" "" "Link1: " "" "line2" "" } $output]
set temp [string trim $temp]
puts "found link : $temp

但是,在这种情况下,我实际上使用regexp来挑选我想要的数据:

regexp -line {Link1:\s+(.*\S)} $output -> temp
puts "found link : $temp

正则表达式往往更适合解析部分格式的数据,只要您记得将它们保持简短。 RE越长,理解就越难。