正则表达式和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)      

a = r'\d+'        # 这个是正则的字符串 ,跟编译正则有本质的区别
lis2 = re.findall(a,"卢本伟就是55开,再来10个马飞,跟开哥也还是55开")
print(lis2)

  


  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"))

  

3.模块的导入

  import
  from xxx import xxxx

  1. 导入模块的执行的步骤
  2. 自定义模块
  3. 自定义包(难点)
    一个表达式 -> 一条语句 -> 语句块 -> 函数 -> 类 -> 模块 -> 包 -> 项目
    包就是我们的文件夹, 包内可以写很多个模块(py文件)

    查找路径是:sys.path, 随动. 跟着你的启动文件所在的位置变化
    不论使用绝对导入. 还是相对导入. 启动文件一定在最外面


  

posted on 2018-12-28 19:17  哎呀!土豆  阅读(101)  评论(0编辑  收藏  举报

导航