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 re str = '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 re str = '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 re str = '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 ...
随机推荐
- java四种内部类详解
一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. 1.常规内部类中的方法可以直接使用外部类的实例变 ...
- 模拟状态为active的日志损坏的数据恢复实验(不完全恢复)
1查看当前日志状态 首先不完全恢复是会丢失数据的,由此在当前打开的数据中我们创建一些测试数据,用来验证当我们进行完不完全恢复后该数据是否还存在. 2模拟删除CURRENT状态的日志 3启动数据验证错误 ...
- 转载:有关qsort的使用方法和注意事项
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , co ...
- Lua语言
下载使用Subline作为编辑器 1. 2.函数使用 function sayHello() print ('hello torch') end 3.定义变量 a print (a) 4.引入文件 r ...
- win10如何让她闭嘴、按什麽建系统都要说话、如何让她闭嘴?
win10如何让她闭嘴.按什麽建系统都要说话.如何让她闭嘴? 开始 设置 轻松使用 讲述人,关掉……
- IOS第九天(1:QQ聊天界面frame模型)
/// 控制层 #import "HMViewController.h" #import "HMMessageModel.h" #import "H ...
- java.lang.UnsupportedClassVersionError: Bad version number in .class file异常
java.lang.UnsupportedClassVersionError: Bad version number in .class file异常 部署工程时也出现过因为版本不同引起的问题,那时我 ...
- Boyer-Moore algorithm
http://www-igm.univ-mlv.fr/~lecroq/string/node14.html Main features performs the comparisons from ri ...
- CentOS7安装mysql5.6.23
============安装glibc版本============== 一.下载glibc版本的Mysql mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zi ...
- TypedValue.applyDimension 中dp和sp之间转化的真相
转载自http://www.cnblogs.com/xilinch/p/4444833.html 最近在看了许多关于dp-px,px-dp,sp-px,px-sp之间转化的博文,过去我比较常用的方式是 ...