python(九)re模块
python中re模块提供了正则表达式相关操作。
1、 字符串匹配:
. 匹配除换行符以外的任意字符
\w 匹配字符或数字或下划线或汉字
\s 匹配任意空白字符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
2、字符串次数匹配:
* 重复0次或多次
+ 重复1次或多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
3、re模块的方法
方法一:match
match:从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.
|
1
2
3
4
|
#格式:re.match(pattern,string,flags=0)# pattern: 正则模型 # string:要匹配的字符串 # flags:匹配模式 |
举例说明:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#无分组import re str='hello,jack123' r=re.match('h\w+',str)print(r.group()) #获取匹配到的所有结果print(r.groups()) #获取模型中匹配到的分组结果print(r.groupdict()) #匹配模型中匹配到的分组结果 #结果:hello #有分组#分组:为了提取匹配成功的指定内容(先匹配成功全部正则,然后再将匹配成功的局部内容提取出来) r1=re.match('h(?P<name>\w+).*k(\d+)',str)print(r1.group()) #获取匹配到的所有结果print(r1.groups()) #获取模型中匹配到的分组结果print(r1.groupdict()) #获取模型中匹配到的分组中所有 执行了key的组 #结果:hello,jack123('ello', '123'){'name': 'ello'} |
方法二:search
search: 浏览整个字符串去匹配第一个,为匹配成功返回None,这里强调一下match方法是从开头去匹配。
格式: search(pattern,string,flags=0)
举例说明:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import restr='123hello,jack123'#无分组r=re.search('h\w+',str)print(r.group()) #获取匹配到的所有结果print(r.groups()) #获取模型中匹配到的分组结果print(r.groupdict()) #获取模型中匹配到的分组结果#结果:hello(){}#有分组r=re.search('h(?P<name>\w+).*k(?P<age>\d+)',str)print(r.group()) #获取匹配到的所有结果print(r.groups()) # 获取模型中匹配到的分组结果print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组#结果:hello,jack123('ello', '123'){'age': '123', 'name': 'ello'} |
方法三:findall
findall:获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中多个组,则以列表形式返回,且每一个匹配均是元组;空的匹配也会包含在结果中。
格式:findall(pattern,string,flags=0)
举例说明:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import restr='123hello,jack123'#无分组r = re.findall('h\w+',str)print(r)#结果:['hello']#有分组r1= re.findall('h(\w+)',str)print(r1)#结果:['ello'] |
方法四:sub
sub:替换匹配成功的指定位置的字符串
|
1
2
3
4
5
6
|
#格式:sub(pattern,repl,string,count=0,flags=0)#pattern:正则模型#repl :要替换的字符串或可执行对象#string :要匹配的字符串#count :指定匹配个数#flags :匹配模式 |
举例说明:
|
1
2
3
4
5
6
7
8
|
import re str='123hello,jack123hello'r=re.sub("h\w+",'456',str,1) #将字符串hello替换成456,后面这个flags=1是匹配到结果后,如果是多个只替换一个,默认是全部替换print(r)#结果:123456,jack123hello |
方法五:split
split:根据正则匹配分割字符串
|
1
2
3
4
5
|
#格式:split(pattern, string, maxsplit=0, flags=0)# pattern: 正则模型# string : 要匹配的字符串# maxsplit:指定分割个数# flags : 匹配模式 |
举例说明:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import restr='123hello,jack123hello'#无分组r=re.split('hello',str,1)print(r)#结果:['123', ',jack123hello']#有分组r1=re.split('(hello)',str,1)print(r1)r2=re.split('(h(ell)o)',str,1) #可以通过括号多切分几层,取到自己满意的结果为止print(r2)#结果:['123', 'hello', ',jack123hello']['123', 'hello', 'ell', ',jack123hello'] |
|
1
2
3
4
5
6
7
|
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'inpp = re.sub('\s*','',inpp) #将空格替换成空new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)print new_content#结果:['1-2*((60-30+', '-40-5', '*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'] |
python(九)re模块的更多相关文章
- Python 全栈开发九 日志模块
日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- 【Python学习之九】模块
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.模块的使用和安装模块和C语言中的头文件以及Ja ...
- 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)
一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...
- python 中time模块使用
在开始之前,首先要说明这几点: 1.在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主 ...
- 【Python之路】第六篇--Python基础之模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- 周末班:Python基础之模块
什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...
- 第四章:4.0 python常用的模块
1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...
随机推荐
- MySQL数据恢复和复制对InnoDB锁机制的影响
MySQL通过BINLOG记录执行成功的INSERT,UPDATE,DELETE等DML语句.并由此实现数据库的恢复(point-in-time)和复制(其原理与恢复类似,通过复制和执行二进制日志使一 ...
- array_reduce方法用回调函数迭代地将对数组的值进行操作
在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>a ...
- time模块目录下自己建立一个名为log的文件夹
使用python调用ping命令,然后在日志中记录ping的结果,用来监测网络连通情况. 代码: [python]from time import *from subprocess import *w ...
- 【iCore3 双核心板】例程十二:通用定时器实验——定时点亮LED
实验指导书及代码包下载: http://pan.baidu.com/s/1kTWAAJ9 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- JS中构造函数与函数
//构造函数中,如果返回的是一个对 象,那么就保留原意. 如果返回的是非对象,比如数字.布尔和字符串,那么就返回 this,如果没有 return 语句,那么也返回this. var myFun1 = ...
- blcok的总结
没有引用外部变量的block 为 __NSGlobalBlock__ 类型(全局block) MRC: 引用外部变量的block 为 __NSStackBlock__ 类型(栈区block) 栈 ...
- home page
How To Set Your Home Page Step 1 – Navigate to Settings > Reading tab. Step 2 – Select A Static P ...
- c#中浅拷贝和深拷贝的理解
c#中拷贝有浅拷贝和深拷贝之分. 例如对象A,其中有值类型字段和引用类型字段: 1.浅拷贝: 对于值类型字段,直接逐位复制到新拷贝的副本对象中,修改副本的字段的值,不会影响源对象中字段的值: 对于引用 ...
- Qt串口通信接收数据不完整的解决方法
在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...
- Range对象理解,浏览器兼容性,获取鼠标光标位置
一.关于浏览器的兼容性 目前主要有3种关于range的类似的对象,分别是W3C range 对象,Mozzlia selection ,ie TextRange 关于这三种的区别,请查看文档 http ...