我一直在寻找一种在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."
由于我对正则表达式的了解有限,我无法找到替代方案。 有关示例的完整列表,请参阅上面的链接。有没有办法实现我的目标?
答案 0 :(得分:2)
\K
是PCRE,Boost,Python PiPy正则表达式和Onigmo库中使用的匹配重置运算符。你在.NET中不需要这个操作符,因为它支持无限宽度的后视(而\K
实际上是一种这种看起来很好的工作方式。)
您只需要尽可能少地匹配任何0+字符,直到第一个跟随空格或字符串结尾的.exe
,并替换为"
+匹配+ "
使用
-replace "^.*?\.exe(?!\S)", '"$&"'
<强>详情
^
- 行的开头.*?
- 除了换行符以外的任何0 +字符\.
- 文字.
exe
- 文字exe
子字符串(?!\S)
- 当前位置右侧应该有空格或字符串结尾。"$&"
- $&
代表整场比赛的替换模式。