2011-11-04 31 views

回答

2

兩個邏輯問題:因爲只需要在1.6.2部分

1),你不希望第一\d之前捕獲.*部分,如此這般括號外。

2)既然你只想匹配有問題的模式,並抓住它,使用重新。 分割是沒有意義的。相反,請使用re.match。這會給你一個Match對象,你可以使用它的.group()方法來獲得實際匹配的文本。 「組0」是整個匹配的模式,「1組」是什麼由第一組括號裏面的東西匹配等

>>> re.match('.*(\d\.\d\.\d)', 'factor-1.6.2.tar.gz').group(1) 
'1.6.2' 

雖然因爲對方的回答表明,實際上是在匹配沒有點.*部分無論如何,因爲我們可以代替搜索爲僅包含我們想要的部分的字符串。這將在字符串中的任何位置尋找模式(匹配期望它在開始處)。由於我們不需要圓括號來使模式在邏輯上工作,並且因爲我們現在要使用整個匹配部分,所以我們不再需要括號。

>>> re.search('\d\.\d\.\d', 'factor-1.6.2.tar.gz').group(0) 
'1.6.2' 
+0

卡爾,謝謝你的時間。它現在更清楚了! – Cmag

2
match = re.search(r'\d\.\d\.\d', sfile) 
if match: 
    version = match.group() 
+0

謝謝!我當然錯過了正則表達式的邏輯...將rtfm更多...你能指出我容易正則表達式howto?現在閱讀pydocs。 – Cmag

+0

我真的很喜歡http://www.regular-expressions.info/和http://www.rubular.com/進行測試。 –

0
>>> re.search(r"\d+(\.\d+)+", sfile).group(0) 
'1.6.2' 
+0

謝謝Sven!偉大的工作 – Cmag

相關問題