-------------------------------------------------------------------------
# coding=utf-8
import socket
import sys
import string
import re
import os
import struct
def re_file(pattern, target):
retval = re.search(pattern, target)
return retval
if __name__ == '__main__':
#retval = re_file("^ZXL\d+_KEY\w+.log", 'ZXL0001_KEY0000000000.log')
key_word = ["ZXL", "_KEY", ".log"]
pattern = "^%s\d+%s\w+%s" %(key_word[0], key_word[1], key_word[2])
target = 'ZXL0001_KEY0000000000.log'
retval = re_file(pattern, target)
if retval:
print retval.group()
-------------------------------------------------------------------------
. 匹配除换行符以外的任意字符
^ 匹配字符串的开始
$ 匹配字符串的结束
[] 用来匹配一个指定的字符类别
? 对于前一个字符字符重复0次到1次
*对于前一个字符重复0次到无穷次
{} 对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d 匹配数字,相当于[0-9]
\D 匹配任何非数字字符,相当于[^0-9]
\s 匹配任意的空白符,相当于[ fv]
\S 匹配任何非空白字符,相当于[^ fv]
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b 匹配单词的开始或结束
-------------------------------------------------------------------------
>>> m=re.search("^ab+","asdfabbbb")>>> print m
None
>>> m=re.search("ab+","asdfabbbb")
>>> print m
<_sre.SRE_Match object at 0x011B1988>
>>> print m.group()
abbbb
上例不能用re.match,因为match匹配字符串的开始,我们无法验证元字符"^"是否代表字符串的开始位置。
>>> m=re.match("^ab+","asdfabbbb")
>>> print m
None
>>> m=re.match("ab+","asdfabbbb")
>>> print m
None
-------------------------------------------------------------------------
>>> re.search("[^abc]","abcd") #"^"在首字符表示取反,即abc之外的任意字符。
<_sre.SRE_Match object at 0x011B19F8>
>>> m=re.search("[^abc]","abcd")
>>> m.group()
'd'
>>> m=re.search("[abc^]","^") #如果"^"在[ ]中不是首字符,那么那就是一个普通字符
>>> m.group()
'^'
-------------------------------------------------------------------------
我理解的是”^”匹配字符串的开始,在MULTILINE模式下,也匹配换行符之后。
>>> m=re.search("^a\w+", "abcdfa\na1b2c3")
>>> m.group()
'abcdfa'
>>> m=re.search("^a\w+", "abcdfa\na1b2c3", re.MULTILINE),
>>> m.group() #
'abcdfa'
我认为flag设定为re.MULTILINE,根据上面那段话,他也应该匹配换行符之后,所以应该有m.group应该有"a1b2c3",但是结果没有,用findall来尝试,可以找到结果。所以这里我理解之所以group里面没有,是因为search和match方法是匹配到就返回,而不是去匹配所有。
>>> m=re.findall("^a\w+", "abcdfa\na1b2c3", re.MULTILINE)
>>> m
['abcdfa', 'a1b2c3']
-------------------------------------------------------------------------
#编译正则表达式,返回RegexObject对象,然后可以通过RegexObject对象调用match()和search()方法
prog = re.compile(pattern)
result = prog.match(string)
跟
result = re.match(pattern, string)
是等价的。