2

正規表現に問題がありました。

次のような行がいくつかあります。

SomeText#"C:\\","Shadow Copy Components:\\","E:\\",""
SomeText#"D:\\"
SomeText#"E:\\","Shadow Copy Components:\\"
SomeText#"SET SNAP_ID=serv.a.x.com_1380312019","BACKUP H:\\ USING \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy47\\ OPTIONS:ALT_PATH_PREFIX=c:\\VERITAS\\NetBackup\\temp\\_vrts_frzn_img_3200\"
SomeText#"SET SNAP_ID=serv.a.x.com_1380312019","BACKUP Y:\\Libs USING \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy47\\ OPTIONS:ALT_PATH_PREFIX=c:\\VERITAS\\NetBackup\\temp\\_vrts_frzn_img_3200\"

私が望むのは、各行を含む jobFileList という名前のグループを取得することです:

"C:\\","Shadow Copy Components:\\","E:\\",""
"D:\\"
"E:\\","Shadow Copy Components:\\"
H:\\
Y:\\Libs

ファイル リストだけが必要であることがわかりますが、# マークの後の全文だけが必要な場合もあれば、削除する必要がある* * がたくさんある場合もあります。実際には、この場合にスクリプトを使用できないため、1 つの正規表現のみでこれを行う必要があり、正規表現の後に他のものの streplace を実行することはできません。

私がしたことは:

SomeText(#.*BACKUP (?P<jobFileList>.*?) .*)?(#(?P<jobFileList>.*))?

しかし、同じGroupNameを設定できないようです:(2番目のjobFileListを別の名前に置き換えると、完全に機能しますが、必要なものではありません.

ご協力いただきありがとうございます、

編集:次のような行をいくつか持つこともできます:

SomeText#/ahol5d72_1_2
SomeText#/p7ol4a1p_1_2
SomeText#Gvadag04SANDsk_Daily
SomeText#/bck_reco_a9ol5765_1_2_827497669

これらすべてのケースで、# マークの後にすべてのテキストが必要です。

4

2 に答える 2

1

これは単一の正規表現と一致する可能性がありますが、私は何も知りませんsplunk。たぶんこれが役立ちます:

("?[A-Z]:\\\\(?:".+|\S+)?)

ライブデモンストレーションはこちら

于 2013-09-30T10:35:53.007 に答える
1

二重バックスラッシュの後の二重引用符に依存しないバージョン:

SomeText#(?:(.*?BACKUP) )?(?P<jobFileList>(?(1)[^ ]*|.*$))

これ(?(1)[^ ]*|.*$)は、Python 2.7.5 でサポートされている条件付きグループです (おそらく、より高いバージョンでは機能しますが、以前のものについてはわかりません)。がある場合BACKUPはすべての非スペースを取得し、ない場合BACKUPは文字列の末尾まですべてを取得します。

正規表現101のデモ

編集:コメントによると、@timmalos の変更後に機能した正規表現:

\#(?P<G>.*?[^E]BACKUP\s)?(?P<G2>f:\\\\Mailbox\\\)?(?P<jobFileList>(?(G)(?(G2)[^\]|\S)‌​*|.*))
于 2013-09-30T11:49:48.660 に答える