0

正規表現を使用してエンティティの名前を制御できるアプリケーションを使用しています。

私はこのような名前のエンティティをたくさん持っています(各行は完全な名前です):

Subsystem - CPU - Utilisation [1x]
Subsystem - CPU - Utilisation [2x]
Subsystem - CPU - Utilisation [4x]
Subsystem - CPU - Queue Length
Subsystem - Disk - Space
Subsystem - Disk - Capacity

そして、正規表現を使用して、それぞれを次のように変換する必要があります。

CPU \n Utilisation
CPU \n Queue Length
Disk \n Space
Disk \n Capacity

(周囲のスペースは\n明確にするためのものであり、実際の出力ではありません)

そのために使用している正規表現は次のとおりです。

Find:     ^Subsystem - (.*) - (.*)( \[.*\])$
Replace:  ${1}\n${2}

これは、[something]パーツがあるものでは機能しますが、ないものでは機能しません。

基本的に、私はとを取得する必要がありpart1ますpart2。ここで、は行の終わりまたは終わりのpart2いずれかで終了します[

4

5 に答える 5

3

この正規表現は、一致を取得する必要があります。

^Subsystem - ([^\s-]+) - ([^\s\[]+)(?=(?:\s\[)|$).*$

このRubularリンクでテスト済み

編集:
「キューの長さ」を含めるように更新

^Subsystem - ([^\s-]+) - (.+?)(?=(?:\s+\[)|$).*$

このRubularリンクでテスト済み

壊す:

  • ^Subsystem -:自明、最初の数文字の定数に一致
  • ([^\s-]+): 負の文字セットのグループをキャプチャします。基本的には、スペースまたはハイフンに到達するまで何でも一致します
  • (.+?)(?=(?:\s+\[)|$):常にスペースと「[」または行末のいずれかが続くもの (貪欲ではない) に一致する正の先読み。は?:非キャプチャ グループであるため、一致しません。
  • .*$:行末まで他のものにマッチ
于 2012-08-30T15:20:15.330 に答える
0

(Notepad ++でテスト済み)

.+?- +([\w ]+) +- +([\w ]+) .*

説明:

.+?-最初のダッシュまで貪欲ではない-

+([\w ]+) +-2番目の単語(文字とスペースのみ)が1つ以上のスペース間で一致する

- +([\w ]+)-ダッシュと1つ以上のスペースが前に付いた2番目の単語(文字とスペースのみ)の一致

.*-文字列の残りの部分

于 2012-08-30T15:29:27.380 に答える
0

これを試してください(最後の部分をオプションにします-ゼロまたは1回):

^Subsystem - (.*) - (.*)( \[.*\])?$

それはうまくいくはずです!

また、http://rubular.com/ を使用して正規表現を試すのが大好きです

于 2012-08-30T15:12:10.283 に答える
-1

$記号の前に別の*が必要です。
以下のように使用します。
^Subsystem - (.*) - (.*)( \[.*\])*$

于 2012-08-30T15:17:20.893 に答える
-1

次に、 [...] 部分をオプションにすることができます:

^Subsystem - (.*) - (.*?)(?: \[.*\])?$
于 2012-08-30T15:12:26.803 に答える