正则表达式技巧

下面是几种关键的正则表达式的属性以及用法总结,并不是太全,深入话题查询python文档即可

常见正则表达式属性
函数\方法描述
compile(pattern,flags=0)使用任何可选的标记来编译正则表达式的模式,返回一个正则表达式对象
match(pattern,string,flags=0)尝试用于正则表达式模板匹配字符串,匹配成功返回结果,若失败则返回None
search(pattern,string,flags)尝试使用正则表达式标记匹配字符串,尝试匹配第一次符合模式的地方,并返回结果,若匹配失败,则返回None
findall(pattern,string,[.flags])查找字符串中所有非重复的正则表达式模式,返回一个匹配列表
*finditer(pattern,string,[,flags])查找字符串中所有非重复正则表达式模式结果,返回是一个迭代器类型,一次产生一个结果
split(pattern,string,max=0)split函数根据正则表达式分隔字符串,分隔为列表类型,返回列表类型,max控制最大分隔次数,默认分隔所有成功匹配的模式
sub(pattern,repl,string,count)使用repl替换正则表达式匹配成功的字符串位置,count控制最大替换次数
purge()清除隐式编译的正则表达式模式
group(num)返回所有匹配对象,或是编号为num的匹配子组
groups(default=None)返回所有由匹配子组构成的元组,若没有匹配成功,则返回一个空元组
groupdict(default=None)返回所有匹配的命名子组,以子组名作为键,若没有匹配成功,则返回空字典
re.I,re.IGNORECASE不区分大小写匹配**
re.L,re.LOCALE根据所使用的本地语言环境通过\w、\W、\b、\B、\s、\S 实现匹配
re.M,re.MULTLINE^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾
re.S、rer.DOTALL“.”(点号)通常匹配除了\n(换行符)之外的所有单个字符;该标记表示“.”(点号)能够匹配所有的字符
re.X、re.VERBOSE通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性
  • 几点说明:

    • purge()函数用于清理正则表达式在系统中的缓存
    • 使用re.compile()可以提升性能
    • 预编译比处理字符串更快
    import re
    
    re.match("foo","food on the table").group()
    re.search("foo","seafood").group()
    
    patt = 'w\+@(\w+\.)?\w+\.com'
    re.match(patt, 'nobody@xxx.com').group()
    re.match(patt, 'nobody@www.xxx.com').group()
    
    m=re.search("\bthe","bitthe dog")
    m_=re.search("\Bthe","bitethe dog")
    print(m_.group())
    
    s = 'This and that.'
    re.findall(r'(th\w+) and (th\w+)', s, re.I)
    re.finditer(r'(th\w+) and (th\w+)', s,re.I).next().groups()
    re.finditer(r'(th\w+) and (th\w+)', s, re.I).next().group(2)
    [g.groups() for g in re.finditer(r'(th\w+) and (th\w+)',s, re.I)]  #列表推导式,注意re.I的使用
    
    s="This and that"
    it=re.finditer(r'(th\w+) and (th\w+)',s,re.I)
    g=it.next()
    print(g.groups())
    
    re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',r'\2/\1/\3', '2/20/91') # Yes, Python is...'20/2/91'
    #使用编号子组可以调换位置
    re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})', r'\2/\1/\3', '2/20/1991') # ... 20+ years old!'20/2/1991'
        
    
    • match函数匹配字符串开头的模式

    • 可使用python原生的面向对象特性,直接调用group方法即可,省去中间步骤

    • search函数将指定的字符数与正则表达式模式进行匹配,并返回第一次匹配成功的结果,若失败,则返回None

    • match函数,只能匹配正则表达式模式与所要匹配的字符串的头处开始匹配,一旦未成功匹配返回错误

    • 注意特殊字符集的使用以及转义字符的应用

    • “\B"和”\b“这两个特殊字符应该注意,\B匹配非单词边界,不限于单词边界,\b则必须匹配孤立的单词边界才可以

    • 在正则表达式中使用原始字符r是一个好的习惯,原生字符可以避免ascii码的冲突问题以及频繁使用反斜杠\的困扰

    • findall函数返回所有成功匹配的一个列表,若失败,返回为空

    • finditer函数则返回一个迭代器,配合子组使用效率较高

    • re.sub函数替换源字符串中匹配的模式,re.subn会返回替换的次数

  • 反斜杠\的作用:

    • 反斜杠后边跟元字符去除特殊功能:即转义
    • 反斜杠后边跟普通字符实现特殊功能:即变为特殊预定义字符
    • 引用序号对应的字组所匹配的字符串:即使用匹配得到的子组元素

    好啦,这就是正则表达式的几点总结和理解,希望对各位有帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯吶psycho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值