python正则用法整理

python正则用法整理

叒是一篇笔记整理,这次来整理下python的正则匹配。其实主要就是几个函数的区别。

match(), search(), findall(),finditer()区别

  • match()仅匹配字符串开头是否正确,如果首字符不匹配就返回None

  • search()寻找第一个匹配的结果,返回一个match对象

  • findall()查找所有匹配项,返回匹配的子串列表

  • finditer()跟findall类似,只不过返回的是个迭代器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import re
    src = "22你好 世界"
    pat = re.compile('[\u4e00-\u9fa5]+')
    pat.search(src)
    >> <re.Match object; span=(2, 4), match='你好'>
    pat.search(src).group() # 返回匹配的内容
    >> 你好
    pat.search(src).span() # 返回匹配子串的下标元组
    >> (2, 4)
    pat.findall(src) # 返回匹配子串列表
    >> ['你好', '世界']

常用正则表达式

  • 匹配邮箱 \w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
  • 匹配中文(不含标点) [\u4e00-\u9fa5]+
  • 匹配时间(hh:mm:ss) ([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d
  • 匹配ip \d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}
  • 匹配日期(年-月-日) (([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)
  • 向前匹配和向后匹配 (?<=前).*?(?=后)

最后附上一个超级好用的在线正则测试工具

作者

江风引雨

发布于

2020-09-04

更新于

2023-01-10

许可协议

CC BY 4.0

评论