Powershell RegEx在字符串

时间:2017-08-24 14:24:33

标签: regex powershell regex-negation regex-lookarounds

我目前正在进行WSUS-Update自动化工作,我希望获得所有不以#34;(德语|英语)语言包开始的更新"。

这是我到目前为止所得到的:

[regex]$reg = "(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })

这有效,但我也得到如下更新: 适用于Windows 7(用于基于x64的系统)的Windows Internet Explorer 9语言包

但我也想用以下语法获取更新: [语言]语言包,例如芬兰语语言包

所以我尝试使用&#39; ^&#39; anchor来确定String的开头

[regex]$reg = "^(?<!German|English|English \(United States\)) Language Pack"
$LanguagePacks = $updates.Where({ $_.Title -match $reg })

但在这种情况下,结果为空:(

你有个主意吗?

Greetz Eldo.O

1 个答案:

答案 0 :(得分:4)

您可以使用

(?<!^(?:German|English(?:\s+\(United States\))?)\s*)Language Pack

请参阅regex demo

如果字符串开头没有Language PackGermanEnglish,则匹配English (United States)

<强>详情

  • (?<! - 如果在当前位置的左侧立即出现模式,则启动一个未通过匹配的负面后视:
    • ^ - 字符串开头
    • (?: - 交替非捕获组的开始:
      • German - 文字子字符串
      • | - 或
      • English - 文字子字符串
      • (?:\s+\(United States\))? - 可选的非捕获组匹配1或0次出现:
        • \s+ - 一个或多个空格
        • \(United States\) - 文字(United States)子字符串
    • ) - 交替小组结束
    • \s* - 0+ whitespaces
  • ) - 结束后面的
  • Language Pack - 文字子字符串