1:
需要匹配的是这样的字符串:
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了
参考: