需要匹配的是這樣的字符串:
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了
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網絡,包括裏邊的迴路測試地址、多播地址等等