RE模块

import re

对一个大篇幅的字符串,按照你的规则找出想要的字符串

  1. # 单个字符匹配
  2. import re
  3. # \w 与 \W #字母数字下划线, 非
  4. # print(re.findall('\w', '太白jx 12*() _')) # ['太', '白', 'j', 'x', '1', '2', '_']
  5. # print(re.findall('\W', '太白jx 12*() _')) # [' ', '*', '(', ')', ' ']
  6.  
  7. # \s 与\S space 非space
  8. # print(re.findall('\s','太白barry*(_ \t \n')) # [' ', '\t', ' ', '\n']
  9. # print(re.findall('\S','太白barry*(_ \t \n')) # ['太', '白', 'b', 'a', 'r', 'r', 'y', '*', '(', '_']
  10.  
  11. # \d 与 \D 数字 非数字
  12. # print(re.findall('\d','1234567890 alex *(_')) # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
  13. # print(re.findall('\D','1234567890 alex *(_')) # [' ', 'a', 'l', 'e', 'x', ' ', '*', '(', '_']
  14.  
  15. # \A 与 ^ 行首
  16. # print(re.findall('\Ahel','hello 太白金星 -_- 666')) # ['hel']
  17. # print(re.findall('^hel','hello 太白金星 -_- 666')) # ['hel']
  18.  
  19. # \Z 与 $ 行尾
  20. # print(re.findall('666\Z','hello 太白金星 *-_-* \n666')) # ['666']
  21. # print(re.findall('666\Z','hello 太白金星 *-_-* \n666')) # []
  22. # print(re.findall('666$','hello 太白金星 *-_-* \n666')) # ['666']
  23.  
  24. # \n 与 \t
  25. # print(re.findall('\n','hello \n 太白金星 \t*-_-*\t \n666')) # ['\n', '\n']
  26. # print(re.findall('\t','hello \n 太白金星 \t*-_-*\t \n666')) # ['\t', '\t']
  1. 重复匹配 [. ? * + {m,n} .* .*?]
    . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
  1. ? 匹配0个或者1个左边的字符,非贪婪方式
    * 匹配0个或者多个左边的字符
  1. + 匹配一个或者多个左边的字符
  1. {m,n} 匹配nm次由前面的正则表达式定义的片段,贪婪方式
  1.  
  1. .* 匹配任意字符任意个数,贪婪模式
  1.  
  1. .*? 匹配任意字符任意个数,非贪婪模式
  1. .匹配任意字符
  2. print(re.findall('a.b','babb'))
  3. print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb'))
  4. print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb',re.DOTALL))
  5. print(re.findall('a.bb','abb abb aaab'))
  6.  
  7. ? 匹配0个或者1个由左边字符定义的片段
  8. print(re.findall('a?b','abbzab abb aab')) # [ab b ab ab b ab]
  9. print(re.findall('a?b','ab')) # [ab]
  10.  
  11. * 匹配0个或者多个左边字符表达式
  12. print(re.findall('a*b','b ab aaaaaab abbbbbbb'))
  13. ['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'b', 'b', 'b', 'b']
  14.  
  15. + 匹配1个或者多个左边字符表达式
  16. print(re.findall('a+b','b ab aaaaaab abb')) # ['ab', 'aaaaaab', 'ab']
  17.  
  18. {m,n} 匹配m个至n左边字符表达式
  19. print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb'))
  20.  
  21. .* 贪婪匹配 从头到尾.
  22. print(re.findall('a.*b','aab ab aaaaab a!!!@#$bz')) # [aab aaaaab a!!!@#$b]
  23.  
  24. # .*? 非贪婪匹配 从头到尾.
  25. print(re.findall('a.*?b','aab ab aaaaab a!!!@#$bz')) #

[ ]

  1. []
  2. print(re.findall('a[abc]b','aab abb acb'))
  3. print(re.findall('a[0-9]b','a1b a2b a3b acb ayb'))
  4. print(re.findall('a[a-z]b','a1b a2b a3b acb ayb adb'))
  5. print(re.findall('a[A-Z]b','a1b a2b a3b aAb aDb aYb'))
  6. print(re.findall('a[a-zA-Z]b','aab aAb aWb aqb a1b')) # 大小写字母
  7. print(re.findall('a[A-z]b','aab aAb aWb aqb a1b'))
  8. print(re.findall('a[0-9][0-9]b','a1b a2b a29b a56b a456b'))
  9. print(re.findall('a[-+*/]b','a+b a-b a*b a/b a6b')) 单纯的想表示- 一定要放在最前面
  1. () 制定一个规则,将满足规则的结果匹配出来
  1. print(re.findall('.*?_sb','wusir_sb alex_sb 日天_sb')) #['wusir_sb', ' alex_sb', ' 日天_sb']
  2. print(re.findall('(.*?)_sb','wusir_sb alex_sb 日天_sb')) # ['wusir', ' alex', ' 日天']
  3. print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company'))
  4. print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
  1. search 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
  1.  
  1. print(re.search('alex','re alex alex 太白'))
  2. # print(re.search('alex','re aaaelx 太白')) # 找不到,返回None
  3. ret = re.search('alex','re alex alex 太白') # <_sre.SRE_Match object; span=(3, 7), match='alex'>
  4. print(ret.group()) # alex
  1. match:行首,None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
  1. print(re.match('barry','barry fdlfjsadfkl ').group()) # 同样用group()取值
  2. print(re.match('barry','qbarry fdlfjsadfkl '))
  1. split 分割 可按照任意分割符进行分割 *****
  1. s1 = 'wusir;太白,alex|日天!小虎'
  2. print(re.split('[;,|!]',s1))
  1. sub 替换
  1. print(re.sub('barry', '太白金星', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。',2)) # 2代表替换两个
  2. # 太白金星是最好的讲师,太白金星就是一个普通老师,请不要将barry当男神对待
  1. # 制定一个统一的规则
  2.  
  3. obj = re.compile('\d{2}') # 制定一个统一的匹配规则
  4. print(obj.findall('fdsafsda4312fdsdf324'))
  5. print(obj.findall('123fksldjf3432fdsjlkf453')) # ['12', '34', '32', '45']

finditer 迭代器

  1. ret = re.finditer('\d', 'ds3sy4784a')
  2. print(ret)
  3. print(next(ret).group()) #
  4. print(next(ret).group()) #
  5. print([i.group() for i in ret]) # ['7', '8', '4']

命名分组

  1. s1 = '深圳电话:0755-546123546 深圳地址:广东..'
  2. print(re.search('\d+-\d+',s1).group())
  3. # 命名分组
  4. # 分组基础上定规则 ?P<组名>
  5. ret = re.search('(?P<quhao>\d+)-(?P<num>\d+)',s1)
  6. print(ret.group('quhao'))
  7. print(ret.group('num'))
  1.  
  1.  
  1.  
  1.  
  1.  
  1.  

day 17 re模块的更多相关文章

  1. DAY 17常用模块

    一.时间模块:time 1.时间戳:time.time() # 可以作为数据的唯一标识 print(time.time) # 1554878849.8452318 2.延迟线程的运行:time.sle ...

  2. Day 17 常用模块

    一.时间模块:time 1.时间戳:time.time() # 可以作为数据的唯一标识 print(time.time) # 1554878849.8452318 2.延迟线程的运行:time.sle ...

  3. 17 hashlib模块

    1.HASH的基本概念 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值. 这种转 ...

  4. python标准库介绍——17 tempfile 模块详解

    ==tempfile 模块== [Example 2-6 #eg-2-6] 中展示的 ``tempfile`` 模块允许你快速地创建名称唯一的临时文件供使用. ====Example 2-6. 使用 ...

  5. SAP 已经有17个模块

    SAP模块清单: 传统五大郎: MM,SD,PP,FI 财务会计CO 管理会计 +QM 质量管理 (制造业用的不少)+ABAP.BASIS.BW BI商务智能的组件之一CRM 客户管理SRM 供应商管 ...

  6. day 17 re模块 正则表达式

    import re    引用re模块 查找 finall:匹配所有,每一项都是列表中的一个元素 search:只匹配从左到右的第一个,得到的不是直接的结果而是一个变量,通过group方法获取结果,没 ...

  7. Python实用笔记 (17)模块

    一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块. 现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲 ...

  8. python模块学习心得

    初始模块 1.什么是模块 模块是用来实现某项功能的一大堆代码,为什么会有模块呢?过程式编程的时候为了减少程序员编程代码的重复性,就利用函数的调用减少了代码的重复性,但是某些时候程序会过于的庞大,我们会 ...

  9. thinkphp model模块

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

随机推荐

  1. 尚硅谷springboot学习17-SpringBoot日志

    SpringBoot使用它来做日志功能: <dependency> <groupId>org.springframework.boot</groupId> < ...

  2. zabbix监控haproxy

    首先修改haproxy.cfg listen monitor_stat : stats uri /ihaproxy-stats stats realm Haproxy\ Statistics stat ...

  3. ADO 动态链接数据库

    ADO(ActiveX Data Objects)是基于组件的数据库编程接口,它是一个和编程语言无关的COM组件系统. 下面内容转载自:http://www.vckbase.com/document/ ...

  4. debian下redis2.8.17安装过程

    下载redis源码包,我下载的是redis2.8.17 解压缩该源码包 tar zxf redis-2.8.17.tar.gz 进入解压缩后的目录 cd redis-2.8.17/ 添加redis用户 ...

  5. python实现排序算法四:BFPTR算法

    所谓的BFPTR算法就是从n个数中寻找最小的K个数,主要思想可以参考注释,写得不是很好,特别是寻找中位数的中位数的时候,欢迎指正: 采用任意排序算法,将分组后的数据进行排序: __author__ = ...

  6. LG Optimus L90 [D415] T-Mobile 刷机

    1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...

  7. 浅析SQL Server 中的SOS_SCHEDULER_YIELD类型的等待

    本文出处:http://www.cnblogs.com/wy123/p/6856802.html 进程的状态转换 在说明SOS_SCHEDULER_YIELD等待之前,先简要介绍一下进程的状态(迷迷糊 ...

  8. ckeditor使用说明

      2015-08-17 15:42热心网友最快回答 一.使用方法:1.在页面<head>中引入ckeditor核心文件ckeditor.js<script type="t ...

  9. SQL Server Assembly (SQL CLR) 还原数据库后的问题

    最近弄项目迁移的时候遇到还原数据库(SQL Server 2008)后遇到的一个问题: 消息 10314,级别 16,状态 11,第 1 行 在尝试加载程序集 ID 65536 时 Microsoft ...

  10. 新建gradle文件

    按照新建自动步骤,建好文件后,在build-gradle 里面 写上: allprojects { group 'aaaa' version '1.0-SNAPSHOT' apply plugin: ...