我的问题字符串有多行:
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>
?
答案 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越长,理解就越难。