1

区切り文字として空白行を使用して文字列をリストに分割するのを手伝ってもらえますか?「\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)
4

3 に答える 3

2

正規表現^\s*$を使用して、ゼロから N 個の空白のみを含むすべての行に一致させることができます。通常、^ と $ は、MULTILINE モードがアクティブでない限り、行頭と行末に一致します。

于 2012-09-08T13:24:04.960 に答える
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

于 2012-09-09T23:24:47.157 に答える
0

Tcllibtextutilパッケージを使用すると、次のことができます。

package require textutil
set paragraphs [textutil::splitx $data {(?n)^\s*\n}]

は文字列を正規表現で分割します。textutil::splitxここでは、1 つ以上の視覚的に空白の行のシーケンスに一致する正規表現を提供します。(通常の string-start の意味の代わりに line-start に一致(?n)する手段^。これがまさに私たちがここで望んでいることです。)

于 2012-09-08T15:15:07.477 に答える