【问题标题】:Powershell Regex Match Beginning and End String Doesn't Match?Powershell正则表达式匹配开始和结束字符串不匹配?
【发布时间】:2017-08-30 11:12:29
【问题描述】:

我正在尝试匹配以下字符串,它总是
Removing:开头
并以--- For User:结尾

我尝试使用以下正则表达式:

\bRemoving: \w+\ --- For User: \b

Removing: Random_Group_Here --- For User: - 应该匹配这个

我正在尝试将此正则表达式分配给我可以用于 -replace 字符串的 powershell 变量。

$regex = "\[\bRemoving: \w+\ --- For User: \b\]"

【问题讨论】:

  • 如果你去掉任一端的\b,它就可以工作。
  • 哦,哇,你说得对,谢谢!

标签: regex powershell


【解决方案1】:

最后一个\b word boundary 仅在模式末尾的空格后有一个字符字符(即主要是字母、数字、_)时匹配。由于没有这样的字符,所以最后一个单词边界阻止匹配。

要么删除最后一个 \b,要么 - 如果您只想在不跟字符字符的情况下匹配该空格 - 使用 (?!\w) 负前瞻来检查。

您还可以将文字空格替换为 \s*(0+ 个空格)/\s+(1+ 个空格)模式,以匹配特定字符之间的任何种类和任何数量的空格。

这是一个变体:

\bRemoving:\s*\w+\s*---\s*For\s+User:\s*

请参阅regex demo

【讨论】:

  • IMO RegEx101 有更好的解释。
  • @LotPings Regex101 不支持 .NET 正则表达式。要获得类似的 .NET 体验,我推荐 Ultrapico Expresso。请参阅screenshot。我发布了一个支持 .NET 正则表达式语法的在线正则表达式测试器 (RegexStorm.net) 的链接,这是一个 证明,该正则表达式也可以在使用 .NET 正则表达式的 Powershell 中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2020-08-23
  • 2014-09-15
  • 2015-03-05
  • 2018-03-05
相关资源
最近更新 更多