我可以使用 Powershell 从 XML 文件中自动提取具有特定模式的未知字符串并将该字符串写入文本文件吗?

Can I use Powershell to automatically extract an unknown string with a specific pattern from a XML file and write that string in a text file?

在一个包含 100 行代码的 XML 文件中,我想找到一个具有特定模式的字符串并将其写入新的文本文件。

字符串包含的内容未知,可能会有所不同,但模式相同。例如:

12hi34

99ok45

它们的共同点是长度为6,元素为:

0-1:整数

2-3: 个字符

4-5:整数

有没有办法使用 Powershell 并编写一个脚本来找到符合模式的字符串并将其导出到文本文件中?

我是 Powershell 和脚本编写的新手。尝试 Google 问题并偶然发现 Select-String,但这并没有解决我的问题。希望你们中的一些人可以在这里指导我。谢谢

编辑:字符串在某些 "free text" 的根元素之外。这不是传统的 XML 文件。

试试这个...

$f = Get-Content '<xml-file>' -ReadCount 0
foreach ($l in $f) {
    if ($l -match '[0-9]{1,3}[a-zA-Z]{2,3}[0-9]{1,5}') {
        Write-Output $matches.0
    }
}

将文件内容填充到变量中。遍历文件的每一行。按模式解析值。

这是匹配片段的样本...

假设文件中只有 一个 标记感兴趣,并且字母仅限于英文字母 'a' 到 'z':

(Get-Content -Raw in.xml) -replace '(?s).*(\d{2}[a-z]{2}\d{2}).*', '' > out.txt

注:

  • 如果未找到匹配的标记,则将输入文件的全部内容写入 out.txt.

  • On Windows PowerShell > 默认生成 UTF-16LE ("Unicode") 文件(在 PowerShell Core它是没有 BOM 的 UTF-8);管道到 Set-Content out.txt -Encoding ... 而不是创建一个具有不同编码的文件。

  • Get-Content -Raw 将整个输入文件作为单个字符串读取。

  • -replace 运算符使用 regular expressions (regexes) for matching - see 获取更多信息。

    • 正则表达式开头的内联选项 (?s) 也使 . 匹配换行符。
    • 默认情况下,匹配区分大小写in;使用 -creplace 进行大小写 敏感 匹配。