python 正则表达式
来源:互联网 发布:netstat查看端口占用 编辑:程序博客网 时间:2024/04/25 09:48
正则表达式匹配规则
\d
:一个数字 \w
:一个字母或数字 .
:匹配一个任意字符 *
:匹配任意个字符(包括0个) +
:匹配至少一个字符 ?
:表示0个或1个字符 {n}
:表示n个字符 {n,m}
:表示n-m个字符 []
:表示精确匹配 A|B
:表示匹配A或者B ^
:表示行的开头,^\d
表示必须以数字开头 $
:表示行的结束,/d$
表示必须以数字结束
切分字符串
>>> re.split(r'\s+', 'a b c')['a', 'b', 'c']
利用正则表达式切分字符串
分组
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()
表示就是要提取的分组。比如:^(\d{3})-(\d{3,8})$
分别定义了两个组,可以直接从匹配的字符串中提取出区别和本地号码:
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')>>> m<_sre.SRE_Match object; span=(0, 9), match='010-12345'>>>> m.group(0)'010-12345'>>> m.group(1)'010'>>> m.group(2)'12345'
贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
>>> re.match(r'^(\d+)(0*)$', '102300').groups()('102300', '')
由于\d+
采用贪婪匹配,直接把后面的0全部匹配了,结果0*
只能匹配空字符串了。
必须让\d+
采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?
就可以让\d+
采用非贪婪匹配:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')
编译
当我们在Python中使用正则表达式时,re模块内部会干两件事情:
1、编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2、用编译后的正则表达式去匹配字符串。
预编译
>>> import re# 编译:>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')# 使用:>>> re_telephone.match('010-12345').groups()('010', '12345')>>> re_telephone.match('010-8086').groups()('010', '8086')
编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。
0 0
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- TypeError: cannot use a string pattern on a bytes-like object解决方法
- JSON-RPC(jsonrpc4j)使用demo
- 获取版本号[[NSBundle mainBundle] infoDictionary]
- C++加载csb文件
- redis 学习笔记(1)-编译、启动、停止
- python 正则表达式
- Android学习笔记—— EventBus 源码解析
- android 调用webservice保持session
- JSON-RPC轻量级远程调用协议介绍及使用
- 工作心得
- Calendar的用法
- StringBuffer与String的区别
- 对验证码进行灰度,二值化样本采集
- poj 2296 Map Labeler(2-SAT+二分,构图)