2013-09-30 34 views
2

與我的正則表達式有一些麻煩。與Splunk的正則表達式

我得到了一些線路是這樣的:

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 

你可以看到我只想文件列表,但有時只有#標記後的全文,有時還有很多我需要刪除的* *。 事實是我不能使用這種情況下的腳本,所以我需要這樣做只有一個正則表達式,不能只是做正則表達式後的其他東西streplace。

我所做的是:

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

,但似乎我不能設置相同的組名:(如果我用另一個名字替換第二jobFileList它的作品完美,但不是我所需要

感謝。你的幫助,

編輯: 我也能有這樣的句子:

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

在所有這些情況下,我需要在#標記後面顯示所有文本。

回答

1

其中雙反斜線後不依賴於雙引號一個版本:

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

此:(?(1)[^ ]*|.*$)是一個條件組在Python 2.7.5中支持(可能適用於更高版本,但我不知道以前的版本)。如果有BACKUP,它抓住所有的非空格,如果沒有BACKUP,它抓住所有東西直到字符串結束。

regex101 demo

編輯:根據意見,在此之後@timmalos'修改工作的正則表達式:

\#(?P<G>.*?[^E]BACKUP\s)?(?P<G2>f:\\\\Mailbox\\\)?(?P<jobFileList>(?(G)(?(G2)[^\]|\S)‌​*|.*)) 
+0

@timmalos真棒!我會更新我的答案,然後:) – Jerry

+0

因爲我有其他案件,我忘了和每一次我只做一行我使用這一個正則表達式: SomeText#(?:(。*?BACKUP))?(? P (?(1)[^] * |。*)) 但仍然沒有工作.. – timmalos

+0

抱歉傑裏仍然沒有設法在測試後工作。仍然在上面 – timmalos

1

這可以與單個正則表達式匹配,但我對splunk一無所知。也許這將幫助:

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

現場演示here

+0

很抱歉,但我忘了一些情況:看後期編輯 – timmalos