正則表達式

需要匹配的是這樣的字符串:

2007-08-29 21:46:20 .....          424               $PLUGINSDIR\ioSpecial.ini
2014-11-21 10:19:42 .....       142736               $PLUGINSDIR\modern-wizard.bmp
2014-11-21 10:19:48 .....       213711               $_8_\Default.cupf

中間的數值是大小,期望得到的是什麼文件,多大

python腳本:

if __name__ == "__main__":
	eachSizePattern = re.compile(ur'\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s+.*\s+(\d+)\s+.*\\(.*\.\w+)')
	testString = '2007-08-29 21:46:20 .....          424               $PLUGINSDIR\ioSpecial.ini'
	match = eachSizePattern.search(testString)
	fileName = '%s' %(match.group(2))
	fileSize = int(match.group(1))
	print fileName + ' , '+str(fileSize)

分析:

001:re.compile(ur

這裏邊的u表示unicode,r表示不用再加轉義字符了

002:\d{4}-\d{2}-\d{2}很簡單,匹配那個日期

003:\s+匹配不包含空白符的字符串,\d{2}:\d{2}:\d{2}\s+就不多說了

004:.* 匹配任意數量的不包含換行的字符,此時用來過濾那麼多的點;\s+匹配之後的空格

005:(\d+)匹配多個數字,這樣可以得到那個數字;\s+匹配之後的空格

006:.*\\  匹配路徑

007:(.*\.\w+) 匹配:任意字符串 或者 點 或者  (>=1個的字母或數字或下劃線或漢字)


爲什麼我們要的文件名字是group(2)?數字是group(1)呢?

因爲:

整個正則表達式匹配到的會複製給group()或者說是group(0)

我們正則表達式裏邊的小括號括上的表示需要獲取的,數字那個(\d+)是第一個,名字那個(.*\.\w+)是第二個

因此接着group(0),它們就是1和2了


使用正則表達式判斷字符串是不是IP地址,該怎麼寫?

r'^([1-9]\d?|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])$'

這個匹配的是ABCDE網絡,包括裏邊的迴路測試地址、多播地址等等





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章