你可以帮我把一个字符串拆分成一个列表,用作分隔符一个空行吗? 使用“\ n \ n”拆分似乎不起作用。 这样一个字符串的一个例子是:
Group: 1.1.1.1, (?)
Source: 2.2.2.2 (?)
Rate: 5382 pps/58470 kbps(1sec), 58469 kbps(last 30 secs), 58327 kbps(life avg)
Group: 3.3.3.3, (?)
Source: 4.4.4.4 (?)
Rate: 9150 pps/99399 kbps(1sec), 99398 kbps(last 30 secs), 85769 kbps(life avg)
Group: 5.5.5.5, (?)
Source: 6.6.6.6 (?)
Rate: 474 pps/5163 kbps(1sec), 5164 kbps(last 30 secs), 5144 kbps(life avg)
答案 0 :(得分:2)
您可以使用正则表达式^\s*$
来匹配仅包含零到N个空格的所有行。通常^和$匹配行的开始和结束,除非MULTILINE模式处于活动状态。
答案 1 :(得分:1)
set mystring {Group: 1.1.1.1, (?)
Source: 2.2.2.2 (?)
Rate: 5382 pps/58470 kbps(1sec), 58469 kbps(last 30 secs), 58327 kbps(life avg)
Group: 3.3.3.3, (?)
Source: 4.4.4.4 (?)
Rate: 9150 pps/99399 kbps(1sec), 99398 kbps(last 30 secs), 85769 kbps(life avg)
Group: 5.5.5.5, (?)
Source: 6.6.6.6 (?)
Rate: 474 pps/5163 kbps(1sec), 5164 kbps(last 30 secs), 5144 kbps(life avg)}
set mylist {}
while {[regexp "(.*)\n\n(.*)" $mystring match part1 part2]} {
lappend mylist $part2
set mystring $part1
}
lappend mylist $part1
mylist
现在按相反顺序保存每组3个非空行 。可能有一些非贪婪的正则表达式会使它按顺序排列,但我现在无法弄明白。如果订单很重要,可以稍后将列表反转,或将lappend
行替换为set
。
答案 2 :(得分:0)
使用Tcllib中的textutil
包,您可以执行以下操作:
package require textutil
set paragraphs [textutil::splitx $data {(?n)^\s*\n}]
textutil::splitx
用正则表达式分割字符串,这里我们提供一个正则表达式,它匹配一个或多个视觉空白行的序列。 ((?n)
表示^
匹配line-start而不是通常的字符串开头含义;这正是我们想要的。)