将长文本字符串拆分为预定义的固定长度

时间:2019-05-12 21:43:00

标签: powershell

我是PowerShell的新手,我试图弄清楚如何将长字符串拆分为预定义的固定长度变量: 例如下面的字符串是30个字符长,我需要分成不同的固定长度,例如前2个字符,然后是8个字符,然后是9个字符,然后是1个字符,然后是5个字符,然后是3个字符,然后是2个字符(总共30个字符)     $ Inputlongtext =“” 123qwert5678990asdfghm09876564“ 我需要的输出是:     $ out1为12     $ out2作为3qwert56     $ out2为78990asdf     $ out2 as g     $ out2为hm098     $ out2为765     $ out2为64 任何帮助将不胜感激! 谢谢,

2 个答案:

答案 0 :(得分:1)

可以使用SubString方法拆分字符串:

.Substring( StartIndex [, length] )

例如

$out1 = $Inputlongtext.SubString(0,2)
$out2 = $Inputlongtext.SubString(3,8)
$out3 = $Inputlongtext.SubString(11,9)

答案 1 :(得分:1)

[编辑-添加了丢失的$Null =,以禁止来自True的{​​{1}}。]
[编辑2-添加了键排序以按源顺序返回对象。]

这是完成这项工作的一种怪异方法。 [ grin ]它使用正则表达式-match选项来捕获特定数量的匹配字符。然后它会从自动变量{count}中获取非0键,并查找值。最后,它将值发送到$Matches集合。

$Results

输出...

$LongText= "123qwert5678990asdfghm09876564"

$Null = $LongText -match '(?<P1>.{2})(?<P2>.{8})(?<P3>.{9})(?<P4>.{1})(?<P5>.{5})(?<P6>.{3})(?<P7>.{2})'
$Results = @($Matches.Keys.Where({$_ -ne 0}) |
    Sort-Object ).
    ForEach({$Matches[$_]})

$Results