匹配PowerShell中列表中的第一个可执行文件路径

时间:2017-10-05 13:38:42

标签: regex powershell

我一直在寻找一种在Windows服务路径中放置引号的方法,因为它们有空格。请参阅https://regex101.com/r/N6cbk8/2我发现的正则表达式突出显示我想要放在引号中的字符串,例如:

D:\SerPatHL7Server\RunAsService.exe runasservice d:\SerPatHL7Server\SerPatHL7server.exe

需要成为

"D:\SerPatHL7Server\RunAsService.exe" runasservice d:\SerPatHL7Server\SerPatHL7server.exe

其他服务也需要这样的引用:

E:\Program Files (x86)\Endobase\ebserver.exe

成为

"E:\Program Files (x86)\Endobase\ebserver.exe"

但是,PowerShell不会接受| Select-String -Pattern "(^.*?)\K\.exe"中的\ K并抛出错误:"The string (^.\*?)\K\.exe is not a valid regular expression: parsing "(^.*?)\K\.exe" - Unrecognized escape sequence \K."

由于我对正则表达式的了解有限,我无法找到替代方案。 有关示例的完整列表,请参阅上面的链接。有没有办法实现我的目标?

1 个答案:

答案 0 :(得分:2)

\K是PCRE,Boost,Python PiPy正则表达式和Onigmo库中使用的匹配重置运算符。你在.NET中不需要这个操作符,因为它支持无限宽度的后视(而\K实际上是一种这种看起来很好的工作方式。)

您只需要尽可能少地匹配任何0+字符,直到第一个跟随空格或字符串结尾的.exe,并替换为" +匹配+ "

使用

-replace "^.*?\.exe(?!\S)", '"$&"'

enter image description here

<强>详情

  • ^ - 行的开头
  • .*? - 除了换行符以外的任何0 +字符
  • \. - 文字.
  • exe - 文字exe子字符串
  • (?!\S) - 当前位置右侧应该有空格或字符串结尾。
  • "$&" - $&代表整场比赛的替换模式。