2013-04-09 52 views
1

我正在修改正則表達式以提取一組組匹配的字符串,但此「超級組」未按預期返回組合匹配的字符串。使用lookaheads進行正則表達式分組(使用Python)

匹配的字符串的形式爲:

/DIR/SOMESTRING-W0.12+345.raw.gz 

,我使用正則表達式:

/DIR/ 
(?P<super> 
    (?P<name>.*?) 
    (?=(?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$) 
) 

我得到了命名組的結果如下:

modifier: '-W0.12+345' 
super: 'SOMESTRING' 
name: 'SOMESTRING' 
extension: 'raw.gz' 

雖然我期待

super: 'SOMESTRING-W0.12+345.raw.gz' 

分組的分組一直對我有用,但現在還沒有,我不明白爲什麼。

希望有人能給我一些提示。

注意:這個表達式的解釋可在(matching a specific substring with regular expressions using awk

找到

回答

2

super相同的文本相匹配,該集團name比賽,因爲前向斷言不提供任何實際的字符匹配(這就是爲什麼他們也被稱爲「零寬度斷言」)。

要獲得期望的結果,只是刪除前瞻斷言:

/DIR/ 
(?P<super> 
    (?P<name>.*?) 
    (?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$ 
) 
+0

哇,這麼簡單的作爲!我的印象是,這種前瞻是絕對必要的。謝謝! – RogerFC 2013-04-09 08:05:26