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

你可以看到我只想要文件列表,但有时它只是 # 标记之后的全文,有时我需要删除很多* *。事实是我不能在这种情况下使用脚本,所以我只需要一个正则表达式就可以做到这一点,不能在正则表达式之后做一些其他的东西。

我所做的是:

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

但似乎我无法设置相同的 GroupName :( 如果我用另一个名称替换第二个 jobFileList 它可以完美地工作,但不是我需要的。

谢谢你的帮助,

编辑:我也可以有一些像这样的行:

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

在所有这些情况下,我需要在 # 标记之后添加所有文本。

4

2 回答 2

1

双反斜杠后不依赖双引号的版本:

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

This:(?(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 回答
1

这可以与单个正则表达式匹配,但是我对splunk. 也许这会有所帮助:

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

现场演示在这里

于 2013-09-30T10:35:53.007 回答