2017-10-05 11 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" 
になるために3210

しかし、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

'\ K'を削除します。ここでは不要です。^- *?\。exe(?!\ S) "、" $& "'' –

答えて

2

\Kは、PCRE、Boost、Python PiPy正規表現、およびOnigmoライブラリで使用される一致リセット演算子です。無限の幅のビヘイビアをサポートしているので、.NETではこの演算子は必要ありません(実際は\Kです)。

は、あなただけの空白や文字列の末尾に続いて最初の.exeまで可能な限り少なく任意の0+文字にマッチし、" +マッチ+ "と交換する必要があります。

使用

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

enter image description here

詳細

  • ^ - ラインの開始
  • .*? - 任意の0+
  • できるだけ少ないように改行以外の文字
  • \. - リテラル.
  • exe - リテラルexeサブ
  • (?!\S) - 直ちに現在位置の右側に空白文字または文字列の末尾があるべきです。
  • "$&" - 置換パターン。$&は完全一致を表します。
+0

美しい!それは魅力のように働く。私はあなたの正規表現をhttps://regex101.com/r/N6cbk8/3の上に追加しました。コード例も私のスクリプトで働いていました。 – SuHwak

+1

@SuHwak regex101は.NETのregex構文をサポートしておらず、上記のデモをどのように動作するかのヒントとして扱いますが、.NETで動作することを証明するものではありません。たとえば、[$ 0 "を置換パターンとして使用する](https://regex101.com/r/N6cbk8/4)する必要があります。 –

関連する問題