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 ...
随机推荐
- js控制只允许输入数字
avascript 只允许输入数字有很多方法,总结如下 1,只允许输入数字和小数点. <input onKeypress="return (/[\d.]/.test(String.fr ...
- NYOJ-组合数
#include <stdio.h> #include <malloc.h> int main() { ; ]; scanf("%d%d", &n, ...
- C#中ref和out的使用与区别
C#中ref关键字和out关键字所实现的功能差不多,都是指定一个形参按照引用传递而不是实参的副本传递.但是二者适用场景还是有些区别的:out适合用在需要retrun多个返回值的地方,而ref则适合用在 ...
- P1072 Hankson 的趣味题
#include<bits/stdc++.h> #define inf 1000000000 #define ll long long using namespace std; int r ...
- MyArrayAdapter 比较标准的写法
; i < mString.size(); i++) { insert(mString.get(i), i); } } notifyDataSetChanged(); LogUtils.LOGD ...
- 【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法
今天分析一下duplicate symbols for architecture x86_64错误 也是困扰我一段时间 不过很幸运 在半个小时内找到了解决方案 百度上对于duplicate sy ...
- 升级到Xcode6.2后 免证书真机调试出错的问题
我的本来是Xcode6.1 可以正常免证书真机调试,升级到Xcode6.2以后,真机调试就报错,然后就又按照这篇文章http://www.cnblogs.com/liuliuliu/p/4030524 ...
- awk 合并文件
问题描述:两个文件a.dat, b.dat a.dat 0 100 1 99 2 93 3 90 ... b.dat 0 0 1 3 2 0 3 2 ... ...
- SSD果然劲爆!
前两周入手了一块浦科特128G盘,不说多了,有图为证 以前把机械盘放在主硬盘位的时候,鲁大师显示是SATA II接口,现在把SSD放在主硬盘位,显示居然是SATA III接口了,看上面测试,确实是II ...
- PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
<?php /* 不知道怎么打印某个函数的参数和相关分类类型的所有函数 以下函数如果没有参数,返回的都是一个数组get_defined_functions() 获取所有已经定义的函数get_de ...