Powershell 正则表达式复杂模式 (XML)
Powershell Regex Complex Pattern (XML)
我在 XML 中有一个字符串,我正在尝试将其重新运行到一个变量(如下)。
<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
我的问题是我不了解正则表达式,而且我发现很难理解如何将我的特殊字符转换为 "string",它不会被解释为正则表达式字符。
方括号之间的文字可以是任意长度和任意字符;这就是我想保存到我的变量中的内容,例如"TEXT - I - FIND - INTERESTING".
我也想知道这是否真的是解决这个问题的最佳方法。
如有任何支持,我们将不胜感激。
不要对 XML!
使用正则表达式
在 PowerShell 中使用 XML 的好处是我们可以使用 XPath 来搜索和导航文档。在您的情况下,我会使用 text()
选择器来解析 CDATA 部分的内部值:
$xml = [xml]@'
<root>
<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
</root>
'@
$interestingString = $xml.SelectSingleNode('//XMLElement/text()').Value
//XMLElement
表示 "find and <XMLElement>
anywhere"
text() 函数很好。这是另一种方式。即使节点不在顶部,这也应该有效。
get-content -raw file.xml | select-xml '//XMLElement' |
% { $_.node.'#cdata-section' }
TEXT - I - FIND - INTERESTING
请注意,cdata 部分中的标签将被忽略。示例:
'<script>
<![CDATA[<message>Welcome to TutorialsPoint</message>]]>
</script>' | select-xml '/script' | % { $_.node.'#cdata-section' }
<message>Welcome to TutorialsPoint</message>
我在 XML 中有一个字符串,我正在尝试将其重新运行到一个变量(如下)。
<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
我的问题是我不了解正则表达式,而且我发现很难理解如何将我的特殊字符转换为 "string",它不会被解释为正则表达式字符。
方括号之间的文字可以是任意长度和任意字符;这就是我想保存到我的变量中的内容,例如"TEXT - I - FIND - INTERESTING".
我也想知道这是否真的是解决这个问题的最佳方法。
如有任何支持,我们将不胜感激。
不要对 XML!
使用正则表达式在 PowerShell 中使用 XML 的好处是我们可以使用 XPath 来搜索和导航文档。在您的情况下,我会使用 text()
选择器来解析 CDATA 部分的内部值:
$xml = [xml]@'
<root>
<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
</root>
'@
$interestingString = $xml.SelectSingleNode('//XMLElement/text()').Value
//XMLElement
表示 "find and <XMLElement>
anywhere"
text() 函数很好。这是另一种方式。即使节点不在顶部,这也应该有效。
get-content -raw file.xml | select-xml '//XMLElement' |
% { $_.node.'#cdata-section' }
TEXT - I - FIND - INTERESTING
请注意,cdata 部分中的标签将被忽略。示例:
'<script>
<![CDATA[<message>Welcome to TutorialsPoint</message>]]>
</script>' | select-xml '/script' | % { $_.node.'#cdata-section' }
<message>Welcome to TutorialsPoint</message>