我想抓住從通過Python正則表達式的字符串的版本號...Python的正則表達式re.compile()匹配字符串
給定文件名:facter-1.6.2.tar.gz
當,內循環:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
如何獲得1.6.2位到版本
我想抓住從通過Python正則表達式的字符串的版本號...Python的正則表達式re.compile()匹配字符串
給定文件名:facter-1.6.2.tar.gz
當,內循環:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
如何獲得1.6.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'
match = re.search(r'\d\.\d\.\d', sfile)
if match:
version = match.group()
謝謝!我當然錯過了正則表達式的邏輯...將rtfm更多...你能指出我容易正則表達式howto?現在閱讀pydocs。 – Cmag
我真的很喜歡http://www.regular-expressions.info/和http://www.rubular.com/進行測試。 –
卡爾,謝謝你的時間。它現在更清楚了! – Cmag