re模块

常用正则表达式符号

‘.‘     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

‘^‘     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

‘$‘     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

‘*‘     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为[‘abb‘‘ab‘‘a‘]

‘+‘     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘‘abb‘]

‘?‘     匹配前一个字符1次或0

‘{m}‘   匹配前一个字符m次

‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘‘ab‘‘abb‘]

‘|‘     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘

‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c

‘\A‘    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的

‘\Z‘    匹配字符结尾,同$

‘\d‘    匹配数字0-9

‘\D‘    匹配非数字

‘\w‘    匹配[A-Za-z0-9]

‘\W‘    匹配非[A-Za-z0-9]

‘s‘     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘

‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘‘3714‘‘city‘‘81‘‘birthday‘‘1993‘}

最常用的匹配语法

re.match 从头开始匹配

re.search 匹配包含

re.findall 把所有匹配到的字符放到以列表中的元素返回

re.splitall 以匹配到的字符当做列表分隔符

re.sub      匹配字符并替换

1)"."匹配除\n以外的任一字符

1 >>> import re
2 >>> a = re.match(".","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
3 >>> print(a)
4 <_sre.SRE_Match object; span=(0, 1), match=‘I‘>

2)"+"匹配前一个字符1次或多次,若是匹配不上会报错

1 >>> a = re.match(".+","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a
3 <_sre.SRE_Match object; span=(0, 44), match=‘IPv4 地址 . . . . . . . . . . . . :
4 >>> a.group()
5 ‘IPv4 地址 . . . . . . . . . . . . : 10.0.0.120‘

没有匹配上

1 >>> a = re.match("\w+","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a.group()
3 Traceback (most recent call last):
4   File "<stdin>", line 1, in <module>
5 AttributeError: ‘NoneType‘ object has no attribute ‘group‘

3)"*"匹配前一个字符0次或者多次,意思是匹配不到也不会出错了

1 >>> a = re.match("\w*","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a.group()
3 ‘‘

4)"?"匹配前一个字符0次或1次,意思是匹配不到也不会出错了

“\w”匹配[a-zA-Z0-9]

1 >>> a = re.match("\w?","!IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a.group()
3 ‘‘
4 >>> a = re.match("\w?","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
5 >>> a.group()
6 ‘I‘

5)"{m}"匹配前一个字符m次

1 >>> a = re.match("\w{3}","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a.group()
3 ‘IPv‘

6)“{n,m}”匹配前一个字符n到m次

1 >>> a = re.match(".{3,6}","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
2 >>> a.group()
3 ‘IPv4 地‘

7)"|"其中一个匹配任意1个

 1 >>> a = re.match("ipv4|IPv4","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
 2 >>> a
 3 <_sre.SRE_Match object; span=(0, 4), match=‘IPv4‘>
 4
 5 没有匹配到的情况
 6 >>> a = re.match("ipv4|IPV4","IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
 7 >>> a
 8
 9 有多个能匹配
10 >>> a = re.match("ipv4|IPv4","ipv4IPv4 地址 . . . . . . . . . . . . : 10.0.0.120")
11 >>> a
12 <_sre.SRE_Match object; span=(0, 4), match=‘ipv4‘>

8)"(...)"分组匹配

1 >>> b = re.search("(abc){2}a(123|456)c", "abcabca456c").group()
2 >>> b
3 ‘abcabca456c‘

9)“\A”,只从字符开头匹配,同"^"

1 >>> b = re.search("\A", "123abcabca456c").group()
2 >>> b
3  ‘‘
4 >>> b = re.search("^", "123abcabca456c").group()
5 >>> b
6 6 ‘‘
7 >>> b = re.search("^", "abcabca456c").group()
8 >>> b
9 ‘‘

10)"\Z"匹配字符结尾,同“$”

"\d"匹配数字0-9

1 >>> b = re.search("^\d.*\d\Z", "350425199904100000 name:Hiha")
2 >>> b
3
4 >>> b = re.search("^\d.*\d\Z", "350425199904100000 name:Hiha123")
5 >>> b
6 <_sre.SRE_Match object; span=(0, 31), match=‘350425199904100000 name:Hiha123‘>

11)“\d”匹配数字0-9

>>> b = re.search("\d", "350425199904100000 name:Hiha123")
>>> b
<_sre.SRE_Match object; span=(0, 1), match=‘3‘>

12)"\D"匹配非数字

1 >>> b = re.search("\D", "350425199904100000 name:Hiha123")
2 >>> b
3 <_sre.SRE_Match object; span=(18, 19), match=‘ ‘>

13)"\s"匹配空白字符、\t 、\n 、\r

1 >>> b = re.search("\s+","ab\tc1\n3").group()
2 >>> b
3 ‘\t‘

14)"(?P<name>...)"分组匹配

1 >>> c = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")
2 >>> c
3 {‘province‘: ‘3714‘, ‘birthday‘: ‘1993‘, ‘city‘: ‘81‘}
匹配方法:

re.sub 匹配字符并替换

1 >>> d = re.sub("\d+","|","abc1def2ghij3klmn")
2 >>> d
3 ‘abc|def|ghij|klmn‘

re.findall把所有匹配到的条件放到以列表中的元素返回

1 >>> d = re.findall("\d+","abc192.168.4.236def2ghij3klmn")
2 >>> d
3 [‘192‘, ‘168‘, ‘4‘, ‘236‘, ‘2‘, ‘3‘]

re.match从头开始匹配

re.search匹配包含

1 >>> d = re.search("\d+","abc192.168.4.236def2ghij3klmn")
2 >>> d
3 <_sre.SRE_Match object; span=(3, 6), match=‘192‘>

re.split 把匹配到的字符当做分隔符

1 >>> d = re.split("\d+","abc192.168.4.236def2ghij3klmn")
2 >>> d
3 [‘abc‘, ‘.‘, ‘.‘, ‘.‘, ‘def‘, ‘ghij‘, ‘klmn‘]
时间: 2024-10-13 23:30:36

re模块的相关文章

Day5 - 常用模块学习

本节大纲: 模块介绍(模块导入方法) time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又

c# 无法加载xxx.dll 找不到指定的模块(如何指定文件夹)

如果直接放在项目运行目录,例如bin/debug可以直接加载,但是这样比较乱. 如果在放debug里面的一个文件夹里面,有可能会报错“无法加载xxx.dll 找不到指定的模块”. 如果路径写成这样就会报错 framework/linphone 解决方法:将/ 改成"\" framework\linphone

LEDAPS1.3.0版本移植到windows平台----HuCsm云掩膜模块

这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuCsm是将LEDAPS项目中的TM/ETM+大气校正流程系列算法中的云掩膜模块由linux系统移植到windows下的产物,代码本身改动不大,使用接口不变. 包含文件: HuCsm.exe hd423m.dll hm423m.dll 编译程序需要包含的静态库有: gctp.lib hdfeos.lib hd423m.lib hm423m

Python学习系列----第五章 模块

5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: 模块名.函数名 有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句 from 模块名 import 函数名1,函数名2.... 5.2 如何定义自己的模块 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字. 比如有这样一个文件test.py

Python:hashlib加密模块,flask模块写登录接口

hashlib模块 主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式 import  hashlib m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象 m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密:用b给一个变量转换

python如何使用pymysql模块

Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而MySQLdb不支持3.x版本. 一.安装 pip3 install pymysql 二.pymysql方法 pymysql.connect()参数说明 参数 类型 说明 host str mysql服务器地址 port int mysql服务器端口号 user str 用户名 passwd str

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块

用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 WIFI模块实现了这个功能.下面向大家就简单分享一下. 工具:网络调试助手  ESP8266  STM32F1开发板 首先,用网络调试助手来虚拟一个服务器,如下: 有了服务器后,接下来我们就要用WIFI来连接这个服务器.ESP8266 有三种工作模式,由于项目要求,我选用了STA中的客户端模式.下面

Saltstack批量编译部署nginx(多模块)

最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环境使用,这就需要用到saltstack的批量安装部署功能了.这篇文章主要介绍nginx的批量部署,下篇讲解tomcat多实例的批量部署方法. 环境介绍: Centos 6.5 salt 2015.5.10 nginx 1.12.0 minion:test 1.修改master配置文件,修改后重启服务

python:模块导入之浅认识

(1)python有大量的模块: 1.内部提供的模块:不需要安装,可以直接调用 2.第三方库:包括业内开源的模块和自己开发的,需要安装 (2)什么是pyc文件: pyc文件的pycodeobject的一种持久化保存,而pycodeobject则是python真正编译的结果 明白什么时pyc文件,则我们需要从python的运行过程说起: 1.首先当python程序运行时,编译的结果则是保存在位于内存中的pycodeobject中,当python运行结束时,将pycodeobject写入到pyc文件