我可以用一个字或一个字符分割一个字符串吗?

时间:2016-01-30 20:09:07

标签: string split powershell-v2.0

我需要通过</event>拆分更长的字符串(整个XML文件),以便在创建的列表的一个元素中包含每个事件。

如果我以天真的方式做到这一点:

$evList = $txtAll.Split("</event>")

我得到了垃圾。所以我最终这样做了:

$evList = $txtAll.replace("</event>","|").Split("|")

</event>替换为|,然后在|拆分。

偶尔出现这个(或其他)奇怪的角色,我又乱糟糟。

有没有办法直接按</event>分割长字符串?怎么样?

1 个答案:

答案 0 :(得分:2)

如有疑问,请阅读documentation。如果要使用Split()方法在子字符串处拆分字符串,则需要使分隔符成为字符串数组:

$evList = $txtAll.Split([string[]]"</event>", [StringSplitOptions]::None)

否则separator参数将被解释为一个字符数组,因此您可以将字符串拆分为给定分隔符字符串中的任何字符。

或者您可以使用-split operator,这样您就可以将字符串拆分为正则表达式:

$evList = $txtAll -split "</event>"

确保分隔符字符串不包含特殊字符,例如通过这样逃避它:

$evList = $txtAll -split [regex]::Escape("</event>")

话虽如此,如果您需要从XML文件中提取数据,那么使用实际的XML parser会更好。像这样:

[xml]$xml = Get-Content 'C:\path\to\your.xml'
$xml.SelectNodes('//event') | Select-Object -Expand InnerText

或者像这样(使用Select-Xml cmdlet):

Select-Xml -Path 'C:\path\to\your.xml' -XPath '//event' |
  Select-Object -Expand Node |
  Select-Object -Expand InnerText