2011-06-21 88 views
0

所以我在Python中使用正則表達式。這是我到目前爲止已經得到了(通過RegExr調試):在Python中分組正則表達式

@@(VAR|MVAR):([a-zA-Z0-9]+)+(?::([a-zA-Z0-9]+))*@@ 

所以我想要匹配是這樣的東西:

@@VAR:[email protected]@ 
@@VAR:param2:[email protected]@ 
@@VAR:param4:param5:param6:[email protected]@ 

從本質上講,你要麼VAR或無功其次由一個冒號然後是一些參數名稱,然後是結尾字符(@@)或另一個:和一個參數。

所以,我得到的關於正則表達式的組是VAR,第一個參數,然後是參數列表中的最後一個東西(對於最後一個例子,第三個組將是0)。我知道組是由(...)創建的,但有沒有什麼方法可以使正則表達式匹配多個組,因此參數5,參數6和0位於它們自己的組中,而不是最多隻有三組?

我想避免必須匹配這個字符串,然後必須拆分:,因爲我認爲這是可以用正則表達式完成的。也許我正在接近這個錯誤的方式。

本質上,我試圖看看我是否可以在匹配過程中找到並拆分,而不是在後期處理中。

回答

1

正則表達式中的組數是固定的。您需要以某種方式進行後期處理。

+0

好的,好吧,那麼幾乎可以回答這個問題。我會用正則表達式找到字符串,然後使用split來解析它。 – wibarr

3

如果這種格式是固定的,你不需要regex,它只是讓它更難。只需使用split

text.strip('@').split(':') 

應該這樣做。

+0

我會,但正則表達式字符串穿插在正常文本中。我想將這些字符串進行正則表達式解析,但看起來我會被迫使用split。 – wibarr

+0

如果你想得到'@@ @ @@'字符串,只需將你的正則表達式匹配模式簡化爲'@@([^ @] +)@@' – rafalotufo