常用的正则表达式模式:

.  匹配除换行符以外的任意字符
\d  匹配一个数字字符。等价于 [0-9]。
\D  匹配一个非数字字符。等价于 [^0-9]。
\s  匹配任何空白字符,包括空格、制表符、换页符等。等价于 [ \f\n\r\t\v]。
\S  匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w  匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W  匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\b  字符的开始或结束。\b\w{6}\b 匹配刚好6个字符的单词
^  匹配字符串开头
$  匹配字符串的结束
[^]   取反,匹配不在[]之中的字符, 例如 [^xyz] 匹配除了x,y,z以外的字符
[]  [xyz],字符x或者y或者z
 匹配0个或1个
*  匹配0个或多个
+  匹配1个或多个
   {}  {m}重复m次,{m,}重复m到多次,{m,n}重复m到n次
()  分组
(?P<name>exp)    将exp匹配到的文本命名为name

更多详细使用可参考:https://www.jb51.net/tools/zhengze.html

re.match   匹配字符串的开始,如果不符合则返回None

re.match(pattern, string, flags=0)

>>> re.match('[a-z]','1aaa')     # 没匹配到返回None
>>> re.match('[a-z]','a1aaa')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match('[a-z]','a1aaa').group() #group()匹配到的字符串
'a'
>>> re.match('[a-z]','a1aaa').span()
(0, 1)

re.search  匹配整个字符串,直到找到一个匹配

>>> re.search('[a-z]','1aaa')
<_sre.SRE_Match object; span=(1, 2), match='a'>

findall  匹配所有符合正则的字符串,以列表形式返回

>>> re.findall('[a-z]','ab11cd22ef33')   #匹配所有符合正则的字符串,并返回列表
['a', 'b', 'c', 'd', 'e', 'f']
>>> re.findall('[a-z]','') #没有匹配到则返回空列表
[]
>>> pat = re.compile(r'\d+')
>>> pat.findall('aa 12 bb34 de')
['', '']
>>> pat.findall('aa 12 bb34 de56')
['', '', '']
>>>
>>> pat.findall('aa 12 bb34 de56',0,5)
['']

finditer   类似findall 将结果作为一个迭代器返回

>>> pattern = re.compile(r'\D+')
>>> i = pattern.finditer('ab-11cd22ef33')
>>> i
<callable_iterator object at 0x7f8fc4d38908>
>>> for x in i:
... print(x)
...
<_sre.SRE_Match object; span=(0, 3), match='ab-'>
<_sre.SRE_Match object; span=(5, 7), match='cd'>
<_sre.SRE_Match object; span=(9, 11), match='ef'>

compile 函数     编译正则表达式。

re.compile(pattern[, flags])

flags:匹配模式 re.I 忽略大小写  re.M 多行模式等

>>> pattern = re.compile(r'\D+')    # 先对正则进行编译,然后再匹配
>>> pattern.search('ab-11cd22ef33').group()
'ab-'
>>> pattern.search('ab-11cd22ef33',0,2).group()
'ab'
>>>
>>> pattern.search('ab-11cd22ef33').start()
0
>>> pattern.search('ab-11cd22ef33').end()
3
>>> pattern.search('ab-11cd22ef33').span()
(0, 3)

split   按照正则匹配的子串将字符串分割并返回列表

>>> re.split(r'\*','a*b*c')
['a', 'b', 'c']

re.sub    查找替换

re.sub(pattern, repl, string, count=0)

>>> re.sub(r'[^a-z]','*','ab11cd22ef33')
'ab**cd**ef**'
>>> re.sub('\D','*','ab11cd22ef33')
'**11**22**33'

(?P<name>exp)

>>> m = re.search('(?P<year>[0-9]{4})','this is 2018 yeara')
>>> m.group('year')
'' >>> m = re.search('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})','test 2012/12 year haha')
>>> m.group()
'2018/08'
>>> m.group('year')
''
>>> m.group('month')
''

python模块--re模块的更多相关文章

  1. python之platform模块

    python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...

  2. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  3. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  4. 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)

    一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...

  5. [Python Day5] 常用模块

    目录: 1.模块介绍 2.time & datetime 3.random 4.OS 5.sys 6.shutil 7.json & pickle 8.shelve 9.xml 处理 ...

  6. python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合. 而对于一个复杂的功能来,可能需要多个函数 ...

  7. linux下python调用c模块

    在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明:   (1)编写C代码,hel ...

  8. Python学习之模块进程函数详解

    今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...

  9. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

  10. python基础——使用模块

    python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

随机推荐

  1. 使用Sublime Text 3进行Node.js开发

    总体思路: 环境: Win7 64bit Sp1 1.官网下载node.js(我的是8.9.4LTS).注意:偶数开头的是稳定版,奇数开头的是测试版.目前我下的版本,已带npm 下载后直接下一步... ...

  2. python 缺少module

    ImportError: No module named lxml ImportError: No module named PyQt4.QtCore sudo apt-get install pyt ...

  3. for循环中break与continue的区别

    1.for循环 for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环.do-while循环. for循环的格式为: for( 初始语句 ; 执行条件 ; 增量 ){循环体}执 ...

  4. python框架之Flask(4)-上下文管理

    知识储备 偏函数 作用 偏函数,帮助开发者自动传递参数. 使用 import functools def index(a1, a2): return a1 + a2 # 原来的调用方式 # ret = ...

  5. React时间组件(时分秒补0)页面全局引用

    1.common.js export function formatTime(data){ var d = new Date(data); function doTime(d){ if(d<10 ...

  6. 13.C# 定义类成员

    1.定义字段 class MyClass { public int MyInt; } 字段可以用readonly修饰,表示该字段只能在构造函数中赋值,还可以用static表示该字段是静态字段 clas ...

  7. 关于12C中optimizer_adaptive_features参数介绍

    optimizer_adaptive_features参数在OLAP数据仓库环境中可以获得较好的效果,实际在重上传轻查询的OLTP系统上,可以关闭这项新功能. 其主要功能是为了在语句执行过程中实时收集 ...

  8. upload-labs

    upload-labs是一个和sqli-labs类似的靶场平台,只不过是一个专门学习文件上传的.整理的很好,虽然并不能将服务器解析漏洞考虑进去,但毕竟一个靶场不可能多个web容器吧,关键是思路很重要, ...

  9. 《linux就该这么学》第三节课 第二节命令笔记

    命令笔记 (随笔原创,借鉴请修改) linux系统中一切都是文件 2.4  系统状态的命令:  ifconfig   :    查看系统网卡信息,包括网卡名称,ip地址,掩码,mac地址,收到数据包大 ...

  10. #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信

    TCP/IP是如何通信的呢? 请看图 用TCP/IP协议族通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接受层从链路层往上走. 客户端为了浏览界面在应用层发送请求,为了方便传输在传输层的 ...