2

我正在尝试在 power-shell 中拆分字符串...我已经对字符串进行了一些工作,但我无法弄清楚最后一部分。

假设我正坐在这个字符串中:

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

我想在 30 个字符标记处拆分它,但我不想拆分一个单词。如果我要拆分它,它将在一行中有“...commen”...在下一行有“t that...”。

什么是分割字符串的优雅方式,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

不确定它有多优雅,但一种方法是在 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 回答