2013-07-04 21 views
0

首先是獨立日快樂!爲那些誰申請!任何人都可以提供更好的解決方案?從左到右的正則表達式。使用python

我正在分析一個Ab Initio圖,爲此,我需要獲取組件的名稱,這是開發人員用來描述其功能的組件名稱,我可以從下面這行中提取。

name ='}}@0|@207000|80000|227000|100000|152000|126000|11654|RFMT: Generate Labels Header|Ab Initio Software|Built-in|1|100|0||6||32769|1|{1|0|}}}' 

我試圖使用正則表達式來提取其是組件的名稱:RFMT:生成標籤標頭

有問題來了:

我的分隔符是|從頭計算軟件這意味着,我需要使用正則表達式從右到左。 有沒有什麼辦法來實現使用Python。

我提出的最有效的解決方案是扭轉一切。

name = line[::-1] 
name = re.search('erawtfoS oitinI bA\|(.*?)\|', name, re.IGNORECASE).group(1) 
name = name[::-1] 

我只想讓它更高效,因爲它將被用於數百個圖表,其中大部分文件都非常大。

+0

如果您的組件名稱包含至少一個字母,這個正則表達式可以工作:[^ |] * [A-ZA-Z] + [^ |] * –

回答

2

你可以只匹配非|字符,使用lookarounds,以確保它的元素Ab Initio...前:

re.search(r'(?<=[|])[^|]*(?=[|]Ab Initio Software)', name, re.IGNORECASE).group() 

即使沒有先行,如果你只需要改變(.*?)到更明確的[^|]*,你會得到正確的結果。但貪婪的前瞻解決方案可能更有效率。無論如何,那就是:

re.search(r'[|]([^|]*)[|]Ab Initio Software', name, re.IGNORECASE).group(1) 
+0

哇所以,我真的需要了解更多關於正則表達式。非常感謝。 – KarTo

+0

@Kar如果你想提高你的正則表達式技能,那麼我將鏈接關於lookarounds的部分的教程絕對值得一讀。 –

相關問題