2017-10-05 24 views
1

我一直在尋找一種方法來將引號放在沒有它們的Windows服務路徑中,因爲它們有空格。見https://regex101.com/r/N6cbk8/2爲我找到了正則表達式其中強調我要加上引號中的字符串,因此,例如:在PowerShell中匹配列表中的第一個可執行路徑

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的將不接受\ K的| Select-String -Pattern "(^.*?)\K\.exe"並引發錯誤:"The string (^.\*?)\K\.exe is not a valid regular expression: parsing "(^.*?)\K\.exe" - Unrecognized escape sequence \K."

我找不到我的正則表達式有限表達知識的替代品。 有關示例的完整列表,請參閱上面的鏈接。有沒有辦法實現我的目標?

+1

刪除'\ K',你不需要在這裏。使用'-replace「^。*?\。exe(?!\ S)」,'「$&」'' –

回答

2

\K是PCRE,Boost,Python PiPy正則表達式和Onigmo庫中使用的匹配重置運算符。 .NET中不需要此運算符,因爲它支持無限寬度的後視(而\K實際上是一種此後視工作)。

你只需要匹配任何字符0+儘可能少達後跟用空格或字符串的結束第一.exe" +匹配+ "更換。

使用

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

enter image description here

詳細

  • ^ - 行
  • .*?開始 - 任何0+字符換行除外儘可能少
  • \. - 字面.
  • exe - 字面exe
  • (?!\S) - 應該有空格或結尾的字符串立即到當前位置的右側。
  • "$&" - 替換模式,其中$&代表整個比賽。
+0

美麗!它像一個魅力。我在https://regex101.com/r/N6cbk8/3上面添加了正則表達式,代碼示例也在我的腳本中工作。 – SuHwak

+1

@SuHwak請注意,regex101不支持.NET正則表達式語法,只能將上述演示視爲它如何工作的提示,但不能證明它在.NET中的工作原理。例如,你需要在那裏使用''$ 0''作爲替代模式](https://regex101.com/r/N6cbk8/4)。 –

相關問題