正则表达式和re模块

1. 正则表达式 匹配字符串
  元字符
    .  除了换行
    \w 数字, 字母, 下划线
    \d 数字

    [] 字符组
    ^ 字符串的开始
    $ 字符串的结束
    | 或者

    [^xxx] 非xxxx


    \s 空白符
    \n 换行
    \t 制表符
    \b 单词的边界
    \W 非数字, 字母, 下划线
    \D  非数字
    \S 非空白符
  
  量词
    *   0->n
    +     1->n
    ?        0->1
    {p}      p次
    {p,q}   p->q次
    {p,}    至少p次

  贪婪
    .*
    .+
  惰性:
    .*?  尽可能少的匹配

  转义 \\\\n    =>   \\n    =>   \n
    正则前面加r

  分组 ()


2. 在python中使用正则. re模块


  在python中获得的正则取一个名字   (?P<name>正则)


  1. search() 搜索. 搜索到第一个结果返回
  2. match() 匹配. 收到一个结果返回. 从头开始匹配
  3. findall() 查找所有匹配结果
  4. finditer() 返回迭代器.
  5. compile() 编译

import re
a = re.compile(r"\d+")  #    编译了一段正则. 加载了一段正则
lis = a.findall("卢本伟就是55开,再来10个马飞,跟开哥也还是55开")
print(lis)      

  


  6. group("name") 获取数据

  7. re.S  忽略掉 . *?  的换行

import re

a = re.findall("\d","卢本伟是56开")
print(a)

b = re.finditer("\d","卢本伟是56开")
for i in b :
    print(i.group())

c = re.search("\d","卢本伟是56开")
print(c.group())


d = re.match("\d","56开是卢本伟")
print(d.group())


kai = re.finditer(r"卢本伟是(?P<aname>.*?),他有一个小弟叫(?P<bname>.*?),","卢本伟是55开,他有一个小弟叫马飞飞,他们关系很好的",re.S)
for i in kai :
    print(i.group("aname"),i.group("bname"))

  


  

猜你喜欢

转载自www.cnblogs.com/gyc-tzx/p/10192395.html