我已将下一个数据转换为变量$ out(类型为Object []):
Success...
Go!
0:#217> trace && .quit
0x000 Subline : _OK
0x008 Timed : NO
0x016 Check : _OK
0x022 Post :
0x030 Offset : None
0x038 Hint : False
0x050 NextHint : False
quit:
我需要在字符串 0:#217>之间提取文本。跟踪&& .quit 和退出: 我写道:
[Regex]::Match($out, "(?<=.quit').+?(?=quit:)").Value
但是这会将所需的数据提取到一行(String类型)中,而不是列(Object [])。如何解决这个问题?
P.S。 我自己解决了这个问题如下
([Regex]'(?is)(?:(?<=\.quit).+(?=quit:))').Match(($out -join "`n")).Value
但也许还有更完美的方法可以做到这一点?
答案 0 :(得分:1)
问题解决了
DataKeyNames="ID"
<asp:TemplateField HeaderText="Purpose" SortExpression="Purpose" ItemStyle-Width="50px" HeaderStyle-Width="50px" HeaderStyle-Wrap="false">
<ItemTemplate>
<asp:Label ID="LabelPurpose" runat="server" Text='<%# Eval("Purpose") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddPurpose1" ondatabinding="PreventErrorOnbinding" class="txtSize" SelectedValue='<%# Bind("Purpose") %>' AppendDataBoundItems="true" runat="server">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="ddPurposeRequiredFieldValidator1" runat="server" Display="Dynamic" ForeColor="Red"
ErrorMessage="Select a purpose type." InitialValue="" ControlToValidate="ddPurpose1" ValidationGroup="relationshipGroup2" />
</EditItemTemplate>
答案 1 :(得分:0)
只需使用-split
功能创建结果String[]
:
$result = ([regex]::Match($a, '\.quit(.*)quit:').Groups[1].value) -split [System.Environment]::NewLine
答案 2 :(得分:0)
[修改:如果$out
为String[]
,则可以使用此功能,例如来自$out = Get-Content results.txt
,根据您的其他评论,您可能会有不同的内容。
作为一般方法,使用true / false标志选择是否允许行,当您看到第一行然后设置标志,当您看到所需的最后一行时,更改标志。
$middle = foreach ($line in $out) {
if ($line -match '^quit') { $allow = $false }
if ($allow) { write-output $line }
if ($line -match '0:#217>') { $allow = $true }
}
测试的顺序决定了结果中是否显示起始行或结束行。
这可以在控制台上缩短,以便输入:
# loop # end line clears flag # print? # start line sets flag
$out |% { if($_ -match '^quit'){$f=0}; if ($f){$_}; if ($_ -match '0:#217>'){$f=1} }
答案 3 :(得分:0)
这可能有用,但它做了一些假设:
$out -match '^ '
@($out)
。-operator
将充当数组的过滤器。