python之re模块

-------------------------------------------------------------------------

# 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()方法

re.compile(pattern, flags=0)

prog = re.compile(pattern)
result = prog.match(string)

result = re.match(pattern, string)
是等价的。








 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值