python正则表达式
来源:互联网 发布:视频转gif软件 编辑:程序博客网 时间:2024/06/14 17:55
1、知识点导图
1、正则表达式简单介绍及意义
2、正则表达式的基本语法
3、正则表达式的七种武器
4、正则表达式的常见语法
2、正则表达式的意义
什么是正则表达式
正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得
益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编
程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已
经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。
Python的正则表达式的模块是 ‘re’,它的基本语法规则就是指定一个字符序列
正则表达式的大致匹配过程
依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹成功;一旦有匹配不
成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很
好理解的,看下图中的示例以及自己多使用几次就能明白。
3、正则表达式的基本语法
1、 字符
2、预定义字符集(可以写在字符集中)
3、数量词
4、边界匹配(不消耗待匹配的字符串中的字符)
\A|仅匹配字符串的开头 \Aabc
\Z|仅匹配字符串的结尾 abc\Z
\b |匹配\w和\W之间的
\B|[^/b]
5、逻辑、分组
贪婪模式的例子
pat = re.compile("ab*")str1 = pat.findall("abbbbbbbbb")print(str1)---------------['abbbbbbbbb']
非贪婪模式的例子
pat = re.compile("ab*?")str1 = pat.findall("abbbbbbbbb")print(str1)---------------['a']
反斜杠的困扰
- 表示\d可以用r”\d”代替”\\d”
- 表示\可以用r”\\”替代”\\\\”
re模块-正则的七个方法
match(pat, orginStr[, flag])
m = re.match(pat, orginStr[, flag])m.string
match方法解释
- 从原始字符串第一个字符开始,匹配正则的规则
- 如果不是从第一个字符开始就匹配不到
- 参数1:正则表达式
- 参数2:原始的字符串
- 参数3:匹配模式(可选参数)
match方法返回值的属性
- m.string: 匹配时使用的文本
- m.re: 匹配时使用的Pattern对象
- m.pos: 文本中正则表达式开始搜索的索引
- m.endpos: 文本中正则表达式结束搜索的索引
- m.lastindex: 最后一个被捕获的分组在文本中的索引
- m.lastgroup: 最后一个被捕获的分组的别名
match方法返回值的方法
- re.group(group1…):获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回,group1可以是编号,也可以是别名
- re.groups([default]):以元组的形式返回全部分组捕获的字符串,如果没有找到返回default设置的值,默认返回None
- groupdict([default]):返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内
- start([group]):返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引).group默认值为0
- end([group]):返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1).group默认值为0
- span([group]):返回(start(group),end(group))
- expand(template):将匹配到的分组代入template中然后返回
search()
compile
pat = re.compile("ab*?") # 得到一个正则表达式的对象
compile(pat[,flag])
- 第一个参数是正则表达式
- 第二个参数是匹配模式
compile匹配模式
escape(str)
re.escape("\d") --> \\d
escape方法详解
- 用于将元字符串进行转义后再返回
- 感觉没有半点用
findall()
split()
sub()\subn()
purge():清空缓存中的正则表达式,等待验证,有点坑
re.purge() --> 返回值是None
Pattern对象
pattern = re.compile("正则表达式")
Pattern对象的属性
- pattern: 编译时用的表达式字符串
- flags: 编译时用的匹配模式,数字形式
- groups: 表达式中分组的数量
- groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内
Pattern对象的方法
1. match(string[, pos[, endpos]]) | re.match(pattern, string[, flags])
- 从第一个字符开始匹配
- string是要匹配的字符串
- pos是起始匹配的位置
- endpos:终止匹配的位置
- 返回值是一个Match对象
match方法例子
import rep = re.compile(r'(\w+) (\w+)(?P<sign>.*)', re.DOTALL)print("p.pattern:", p.pattern)print("p.flags:", p.flags)print("p.groups:", p.groups)print("p.groupindex:", p.groupindex)### output #### p.pattern: (\w+) (\w+)(?P<sign>.*)# p.flags: 16# p.groups: 3# p.groupindex: {'sign': 3}
2. search(string[, pos[, endpos]]) | re.search(pattern, string[, flags])
- 从字符整个字符串开始搜索匹配
- string是要匹配的字符串
- pos是起始匹配的位置
- endpos:终止匹配的位置
- 返回值是一个Match对象
search方法例子
# encoding: UTF-8 import re # 将正则表达式编译成Pattern对象 pattern = re.compile(r'world') # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None # 这个例子中使用match()无法成功匹配 match = pattern.search('hello world!') if match: # 使用Match获得分组信息 print match.group()### 输出 #### world
3. split(string[, maxsplit]) | re.split(pattern, string[, maxsplit])
- 从字符整个字符串开始搜索匹配
- string:要匹配的字符串
- maxsplit:指定最大分割次数,不指定将全部分割
- 返回值是一个分割的列表
split方法例子
import rep = re.compile(r'\d+')list1 = p.split('one1two2three3four4')print(list1)### output #### ['one', 'two', 'three', 'four', '']
4. findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags])
- 从开头到末尾匹配字符串
- string是要匹配的字符串
- pos是起始匹配的位置
- endpos:终止匹配的位置
- 返回一个找寻到的列表
findall
import rep = re.compile(r'\d+')list1 = p.findall('one1two2three3four4')print(list1)### output #### ['1', '2', '3', '4']
5. finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])
- 过滤出想要的数据,返回值是一个迭代器
finditer方法例子
import rep =re.compile(r'\d+')for m in p.finditer('one1two2three3four4'): print m.group()### output #### 1 2 3 4
6. sub(repl, string[, count]) | re.sub(pattern, repl, string[, count])
- 利用repl字符串替换原有string字符串
- 第一个参数repl:要替换的字符串
- 第二个参数string:原始字符串
- 第三个参数count:count用于指定最多替换次数,不指定时全部替换
- 返回值:返回一个字符串
sub方法
import rep = re.compile(r'(\w+) (\w+)')s = 'i say, hello world!'print p.sub(r'\2 \1', s)def func(m): return m.group(1).title() + ' ' + m.group(2).title()print p.sub(func, s)### output #### say i, world hello!# I Say, Hello World!
组与Match对象
常见的正则表达式
QQ表达式
"[1-9]\\d{4,10}"
QQ号规则
- 首先扣扣号开头不能为0;
- QQ号必须大于5且小于11(或12,13,QQ号最长位)
手机号表达式
# 平常手机号"1[34578]\\d{9}"# 手机号码后5位相同"1[34578]\\d{4}(\\d)\\1{4}"
手机号码规则
- 手机号位数为11位
- 开头为1,第二位为3或4或5或7或8
邮箱表达式
"[\w\-\.]+\@(?:[\w\-]+\.)+[a-z]{2,3}"
邮箱规则
- @符号前面的可以为字母,数字,下划线,中划线,或’.’
- @后面的可以是xxx.com、xxx.cn、xxx.com.cn
用户名表达式
"[a-zA-z]\\w{0,9}"
用户名规则
- 必须以字母开头,长度在10位以内
密码表达式
".{6,16}"
密码规则
- 任意字符,6~16位
阅读全文
0 0
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- 二叉树的翻转操作
- [Cocos2dx] 优化Cocos2d-x游戏性能
- java把web项目发布网上,Sunny-Ngrok内网穿透服务网址
- linux安装vmware出现kernel-header问题
- 排序方法总结——Java语言描述
- python正则表达式
- 血管性头痛 头痛
- tomcat<Server.xml配置详解
- 实现UIView背景颜色渐变
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)+缓存
- BZOJ 2730: [HNOI2012]矿场搭建
- RevyvlerView高级
- 虚拟机出现正在决定eth0的IP信息....失败;无连接。检查电缆吗?
- inline函数