我可以按整个单词或仅按单个字符拆分字符串吗?

goo*_*oly 3 string split powershell-2.0

我需要通过以下方式分割更长的字符串(整个 XML 文件)</event>使每个事件都位于创建的列表的一个元素中。

如果我以一种天真的方式这样做:

$evList = $txtAll.Split("</event>")
Run Code Online (Sandbox Code Playgroud)

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

$evList = $txtAll.replace("</event>","|").Split("|")
Run Code Online (Sandbox Code Playgroud)

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

偶尔这个(或其他)奇怪的角色出现,我就会再次陷入混乱。

有没有办法直接用 分割长字符串</event>?如何?

Ans*_*ers 5

如有疑问,请阅读文档。如果您想使用以下方法在子字符串处拆分字符串,Split()则需要将分隔符设置为字符串数组:

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

否则分隔符参数将被解释为字符数组,因此您将在给定分隔符字符串中的任何字符处拆分字符串。

或者您可以使用-split运算符,它允许您在正则表达式中分割字符串:

$evList = $txtAll -split "</event>"
Run Code Online (Sandbox Code Playgroud)

确保分隔符字符串不包含特殊字符,例如通过像这样转义:

$evList = $txtAll -split [regex]::Escape("</event>")
Run Code Online (Sandbox Code Playgroud)

话虽如此,如果您需要从 XML 文件中提取数据,那么最好使用实际的XML 解析器,例如:

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

或像这样(使用Select-Xmlcmdlet):

Select-Xml -Path 'C:\path\to\your.xml' -XPath '//event' |
  Select-Object -Expand Node |
  Select-Object -Expand InnerText
Run Code Online (Sandbox Code Playgroud)