2

私はPowerShellで文字列を分割しようとしています...私はすでに文字列に対していくつかの作業を行っていますが、この最後の部分を理解できません。

私がこのひもで座っているとしましょう:

This is a string. Its a comment that's anywhere from 5 to 250 characters wide.

30文字のマークで分割したいのですが、単語を分割したくありません。分割すると、1行に「...commen」...次の行に「tthat...」が表示されます。

単語を半分に分割せずに、文字列を50maxに分割する優雅な方法は何ですか?簡単にするために、単語はスペースです(コメントには、数値テキスト「$ 1.00」が含まれている場合もあります。これも半分に分割しないでください)。

4

3 に答える 3

7
$regex = [regex] "\b"
$str = "This is a string. Its a comment that's anywhere from 5 to 250 characters wide."
$split = $regex.split($str, 2, 30)
于 2012-08-27T14:56:21.380 に答える
0

それがどれほど優雅かはわかりませんが、それを行う1つの方法は、30文字の長さの部分文字列でlastindexofを使用して、最大の30文字未満の値を見つけることです。

$str = "This is a string. Its a comment that's anywhere from 5 to 250 characters wide."
$thirtychars = $str.substring(0,30)
$sen1 = $str.substring(0,$thirtychars.lastindexof(" ")+1)
$sen2 = $str.substring($thirtychars.lastindexof(" "))
于 2012-08-27T22:41:02.540 に答える
0

「単語」がスペースで区切られたトークンであると仮定します。

$str = "This is a string. Its a comment that's anywhere from 5 to 250 characters wide."
$q = New-Object System.Collections.Generic.Queue[String] (,[string[]]$str.Split(" "));
$newstr = ""; while($newstr.length -lt 30){$newstr += $q.deQueue()+" "}

文字列をトークン化し(スペースで分割)、配列を作成します。コンストラクター内の配列を使用してQueueオブジェクトを作成すると、キューに自動的にデータが入力されます。次に、新しい文字列の長さが制限に達するまで、キューからアイテムを「ポップ」します。

,[string[]]$str.Split(" ")コンストラクターを正しく機能させるための趣のある構文に注意してください。

mp

于 2012-08-29T01:31:22.973 に答える