python中的RE模块
re模块(* * * * *)
就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
字符匹配(普通字符,元字符):
1 普通字符:大多数字符和字母都会和自身匹配
>>> re.findall('alvin','yuanaleSxalexwupeiqi')
['alvin']
2 元字符:.(匹配所有)
^只(从头开始匹配)
$(必须在最后匹配)
*(重复匹配)(0到无穷)
n2="kuisddddss"
>>> re.findall('d*',n2)
['', '', '', '', 'dddd', '', '', '']
>>> n3="asdhfale"
>>> re.findall("alex*",n3)
['ale']
+(重复匹配)(1到无穷)
>>> n3="asdhfale"
>>> re.findall("alex+",n3)
[]
?(重复匹配)(0或1次)
n4 = "asdhfale"
>>> re.findall("alex?",n4)
['ale']
n5= "asdhfalexxxxx"
>>> re.findall("alex?",n5)
['alex']
{ }自定义次数,如{0,}=*,{6}固定6次,{0,6}0到6次
[ ]或 比如x[yz] 匹配xy或xz 其它符号在[ ] 中皆为普通字符。除了-,比如[a-z]匹配a到z,和^比如[^a-z]匹配非a到z,和\转义符,比如\(\)
|或,比如ka|b,匹配ka或b
re.match类似serach加一个^
sub:替换,subn,结果显示替换次数
>>> re.sub(r"\d","a"," ki88s1i")
' kiaasai'
>>> re.subn(r"\d","a"," ki88s1i")
(' kiaasai', 3)
compile编辑规则
ssa=re.compile("\d+")
>>> ssa.findall("sdii888")
['888']
去优先级:
比如:(findall优先匹配组里的信息)
re.findall(r'www\.(baidu|3dm)\.com',"www.3dm.com")
['3dm']
去优先级:?:
>>> re.findall(r'www\.(?: baidu|3dm)\.com',"www.3dm.com")
['www.3dm.com']
再如
>>> re.findall(r'(abc)+',"abcabcabc")
['abc']
如何取出全部呢?依然是去优先级
>>> re.findall(r'(abc)+',"abcabcabc")
['abc']
元字符之. ^ $ * + ? { }
|
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
26
27
28
29
30
|
import reret=re.findall('a..in','helloalvin')print(ret)#['alvin']ret=re.findall('^a...n','alvinhelloawwwn')print(ret)#['alvin']ret=re.findall('a...n$','alvinhelloawwwn')print(ret)#['awwwn']ret=re.findall('a...n$','alvinhelloawwwn')print(ret)#['awwwn']ret=re.findall('abc*','abcccc')#贪婪匹配[0,+oo] print(ret)#['abcccc']ret=re.findall('abc+','abccc')#[1,+oo]print(ret)#['abccc']ret=re.findall('abc?','abccc')#[0,1]print(ret)#['abc']ret=re.findall('abc{1,4}','abccc')print(ret)#['abccc'] 贪婪匹配 |
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
|
1
2
|
ret=re.findall('abc*?','abcccccc')print(ret)#['ab'] |
元字符之字符集[]:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#--------------------------------------------字符集[]ret=re.findall('a[bc]d','acd')print(ret)#['acd']ret=re.findall('[a-z]','acd')print(ret)#['a', 'c', 'd']ret=re.findall('[.*+]','a.cd+')print(ret)#['.', '+']#在字符集里有功能的符号: - ^ \ret=re.findall('[1-9]','45dha3')print(ret)#['4', '5', '3']ret=re.findall('[^ab]','45bdha3')print(ret)#['4', '5', 'd', 'h', '3']ret=re.findall('[\d]','45bdha3')print(ret)#['4', '5', '3'] |
元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等
|
1
2
3
4
|
ret=re.findall('I\b','I am LIST')print(ret)#[]ret=re.findall(r'I\b','I am LIST')print(ret)#['I'] |
现在我们聊一聊\,先看下面两个匹配:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#-----------------------------eg1:import reret=re.findall('c\l','abc\le')print(ret)#[]ret=re.findall('c\\l','abc\le')print(ret)#[]ret=re.findall('c\\\\l','abc\le')print(ret)#['c\\l']ret=re.findall(r'c\\l','abc\le')print(ret)#['c\\l']#-----------------------------eg2:#之所以选择\b是因为\b在ASCII表中是有意义的m = re.findall('\bblow', 'blow')print(m)m = re.findall(r'\bblow', 'blow')print(m) |
元字符之分组()
|
1
2
3
4
5
6
|
m = re.findall(r'(ad)+', 'add')print(m)ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')print(ret.group())#23/comprint(ret.group('id'))#23 |
元字符之|
|
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
26
27
28
29
30
|
import reret=re.findall('a..in','helloalvin')print(ret)#['alvin']ret=re.findall('^a...n','alvinhelloawwwn')print(ret)#['alvin']ret=re.findall('a...n$','alvinhelloawwwn')print(ret)#['awwwn']ret=re.findall('a...n$','alvinhelloawwwn')print(ret)#['awwwn']ret=re.findall('abc*','abcccc')#贪婪匹配[0,+oo] print(ret)#['abcccc']ret=re.findall('abc+','abccc')#[1,+oo]print(ret)#['abccc']ret=re.findall('abc?','abccc')#[0,1]print(ret)#['abc']ret=re.findall('abc{1,4}','abccc')print(ret)#['abccc'] 贪婪匹配 |
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
|
1
2
|
ret=re.findall('abc*?','abcccccc')print(ret)#['ab'] |
元字符之字符集[]:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#--------------------------------------------字符集[]ret=re.findall('a[bc]d','acd')print(ret)#['acd']ret=re.findall('[a-z]','acd')print(ret)#['a', 'c', 'd']ret=re.findall('[.*+]','a.cd+')print(ret)#['.', '+']#在字符集里有功能的符号: - ^ \ret=re.findall('[1-9]','45dha3')print(ret)#['4', '5', '3']ret=re.findall('[^ab]','45bdha3')print(ret)#['4', '5', 'd', 'h', '3']ret=re.findall('[\d]','45bdha3')print(ret)#['4', '5', '3'] |
元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等
|
1
2
3
4
|
ret=re.findall('I\b','I am LIST')print(ret)#[]ret=re.findall(r'I\b','I am LIST')print(ret)#['I'] |
现在我们聊一聊\,先看下面两个匹配:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#-----------------------------eg1:import reret=re.findall('c\l','abc\le')print(ret)#[]ret=re.findall('c\\l','abc\le')print(ret)#[]ret=re.findall('c\\\\l','abc\le')print(ret)#['c\\l']ret=re.findall(r'c\\l','abc\le')print(ret)#['c\\l']#-----------------------------eg2:#之所以选择\b是因为\b在ASCII表中是有意义的m = re.findall('\bblow', 'blow')print(m)m = re.findall(r'\bblow', 'blow')print(m) |
元字符之分组()
|
1
2
3
4
5
6
|
m = re.findall(r'(ad)+', 'add')print(m)ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')print(ret.group())#23/comprint(ret.group('id'))#23 |
python中的RE模块的更多相关文章
- Python中的random模块,来自于Capricorn的实验室
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- Python中的random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- 浅析Python中的struct模块
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...
- python中的StringIO模块
python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...
- python中的select模块
介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- python中的shutil模块
目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...
- Python中使用operator模块实现对象的多级排序
Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...
- 【转】浅析Python中的struct模块
[转]浅析Python中的struct模块 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概 ...
随机推荐
- 巧用std::shared_ptr全局对象释放单例内存
巧用std::shared_ptr 单例的使用相对比较广泛,但是需要在程序退出前调用它的析构函数对数据进行释放,常规做法是在main函数末尾进行释放工作, 但是这样相对比较繁琐,因此便有了利用全局变量 ...
- mac 下mysql安装
系统环境: OS X Yosemite 10.10.3 登录用户: fx (有 sudo 权限) MySQL版本: 5.5.49 (mysql-5.5.49-osx10.9-x86_64.tar) M ...
- JAVA EE------XML
1.XML定义:在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语 ...
- Wpf binging (二) 集合绑定
除去简单控件的数据绑定,还有集合控件的数据绑定,一下示例 这发现 source 变成了 itemsSource Path 变成了 DisplayMemberPath itemsSource:代 ...
- 在Raspbian Stretch系统上设置Home Assistant开机启动
较新的Linux发行版趋向于用systemd管理守护进程,如果您不确定系统是否正在使用systemd,您可以使用以下命令进行检查: -o comm= 如果上述命令返回字符串systemd,说明系统正在 ...
- Android测试中常用的adb命令
进入root权限adb root adb remount 重启手机 adb reboot 查看手机devices版本(adb是否连接手机) adb devices 点亮手机电源键/菜单键/home键 ...
- linux下安装python3(转)
一.Linux下安装Python 二.Linux下Python安装完成后如何使用pip命令 三.Linux下Python安装完成后如何使用yum命令 四.Linux下安装Anaconda 五.Linu ...
- Linux 学习之路 --------ip地址虚拟网络
// ifconfig 查看IP地址 网络信息 我的IP 39.161.136.25 ① 为网卡临时配置IP地址 ifconfig eth0 39.161.136.5 (netmask ...
- Oracle数据库:ORA-54013错误解决办法
ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 —— 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图 ...
- Web测试常见问题点汇总
UI测试 [目标] 确保用户可以访问产品所提供的浏览功能.符合企业或行业标准,包含用户易用性,友好性.可操作性等 [关注点] 菜单.对话框以及上边的文字.按钮.错误提示.帮助信息.图标.位置等. [常 ...