Python正则表达式基础知识总结
来源:互联网 发布:广东省公务员网络培训 编辑:程序博客网 时间:2024/05/04 20:25
一、正则表达式概念
使用单个字符串来描述匹配一系列符合某个句法规则的字符串
是对字符串操作的一种逻辑公式
应用场景:处理文本和数据
正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;否则匹配失败
为什么使用正则?
把匹配做成一个规则
‘a’<=b<=’z’
二、Python正则表达式re模块
#EXAMPLE
# -*- coding: utf-8 -*-import re#字符串匹配str='hello demo'print str.find('demo') #返回起始索引print '-------'#第一个正则表达式demopa=re.compile(r'hello')#返回pattern实例 ,最好使用源字符串print type(pa)ma=pa.match(str) #该方法返回一个match对象或者noneprint ma.group() #返回str or tuple,内容上,返回的是源字符串中的匹配出来的字符串print ma.span() #返回匹配字符串在源字符串中的位置(起始,不包含末尾)print ma.string #返回源字符串print ma.re #返回pattern实例print '-------'#忽略大小写的正则表达式pa=re.compile(r'imooc',re.IGNORECASE)#返回pattern实例ma=pa.match('ImOOc python') #该法返回一个match对象或者noneprint ma.group()pa=re.compile(r'(imooc)',re.IGNORECASE)#返回pattern实例ma=pa.match('ImOOc python') #该法返回一个match对象或者none#以上两句等价于#ma=re.match(r'(imooc)','ImOOc python') #格式:re.match(pattern,string ) 但是Pattern只能用一次print ma.groups() #返回元组print ma.group() #返回字符串
三、正则表达式语法
对于单个字符的匹配
字符
匹配
.
匹配任意字符(除了\n)
[…]
匹配字符集
\d/\D
匹配数字/非数字
\s/\S
匹配空白/非空白字符
\w/\W
匹配单词字符[a-zA-Z0-9]/非单词字符
字符集例子: [abc],[a-z](a到z的所有字符),[a-zA-Z0-9],
如果想匹配有中括号的字符串,需要对中括号进行转译(转外层的中括号)
对于多个个字符的匹配
字符
匹配
*
匹配前一个字符0次或者无限次
+
匹配前一个字符1次或者无限次
?
匹配前一个字符0次或者1次
{m}/{m,n}
匹配前一个字符m次或者n次
*?/+?/??
匹配模式变为非贪婪(尽可能少匹配字符)
e.g.
匹配以大写字母开头的:
ma=re.match(r'[A-Z][a-z]*','Aaaa')print ma.group()
ma=re.match(r'[A-Z][a-z]*','Aaa1')print ma.group() #只匹配到Aaa
匹配以Python变量命名规则为标准的字符串:
ma=re.match(r'[_A-Za-z]+[_\w]*','_10')
匹配0-99的数字字符串:
ma=re.match(r'[1-9]?[0-9]','99')print ma.group()
匹配6-10位数字的QQ邮箱
ma=re.match(r'[\w]{6,10}@qq.com','ass123@qq.com ')print ma.group()
非贪婪模式:
# -*-coding:utf-8-*-import rema=re.match(r'[0-9][a-z]*?','1bc')print ma.group()#最少匹配0次 1ma=re.match(r'[0-9][a-z]+?','1bc')print ma.group()#最少匹配1次 1bma=re.match(r'[0-9][a-z]??','1bc')print ma.group()#最少匹配0次 1
边界匹配(指定开头和结尾)
字符
匹配
^
匹配字符串开头
$
匹配字符串结尾
\A/\Z
指定的字符串必须出现在开头/结尾
匹配以163.com结尾的字符串:
ma=re.match(r'[\w]+@163.com$','123asd@163.com')print ma.group()
或者:
ma=re.match(r'[\w]*@163.com\Z','123asd@163.com')print ma.group()
字符
匹配
|
匹配左右任意一个表达式
(ab)
括号中表达式作为一个分组
\<number>
引用编号为num的分组匹配到的字符串
(?P<name>)
分组起一个别名
(?P=name)
引用别名为name的分组匹配字符串
e.g:
匹配左右任意字符串:
ma=re.match(r'abd|c','c')print ma.group()
匹配126或者163邮箱
ma=re.match(r'[\w]{4,6}@(163|126).com','hello@126.com')print ma.group()#等价于:ma=re.match(r'[\w]{4,6}@163.com|[\w]{4,6}@126.com','hello@126.com')print ma.group()
验证XML的有效性
ma=re.match(r'<([\w]+>)\1','<book>book>')print ma.group()#<book>book>ma=re.match(r'<([\w]+>)[\w]*</\1','<book>python</book>')print ma.group()#<book>python</book>
使用别名引用分组:
ma=re.match(r'<(?P<mark>[\w]+>)[\w]*</(?P=mark)','<book>python</book>')print ma.group()#<book>python</book>
注:以别名引用分组,方便使用,引用方式:(?P=mark)
四、Python正则表达式——re模块其他方法
1. search(pattern,string,flags=0)
在一个字符串中查找匹配
e.g.
str='booknum=999'
info=re.search(r'\d+',str)
print info.group()
2. findall(pattern,string,flags=0)
找到匹配,返回所有匹配部分的列表
e.g.
str='book=10,vedio=99,songs=20'
info=re.findall(r'\d+',str)
print info
#['10', '99', '20']
sum([int(x)for x ininfo]) #列表解析,求列表元素之和
3. sub(pattern,repl,string,count=0,flags=0)
将字符串中匹配正则表达式的部分替换为其他值
(repl可以是字符串也可以是函数,string与pattern匹配产生match对象传给函数,接着替换返回函数的返回值那部分,其余不变)
e.g.
第一种,repl是字符串
str='literal books=1000'info=re.sub(r'\d+','1001',str)print info#literal books=1001
第二种,repl是函数
str1='literalbooks=1000'
def add1(match):
val=match.group()
num=int(val)+1
return str(num)
info=re.sub(r'\d+',add1,str1)
print info
#literal books=1001
4. split(pattern,string,maxsplit=0,flags=0)
根据匹配分割字符串,返回分割字符串组成的列表(比较灵活)
e.g.
str1='lang:pythonc c++ java,c#'
result=re.split(r':| |,',str1)
print result
#['lang', 'python', 'c', 'c++', 'java','c#']
- Python正则表达式基础知识总结
- [正则表达式]基础知识总结
- Python正则表达式-总结
- python 正则表达式总结
- python基础知识——正则表达式,
- 关于python的基础知识11--正则表达式
- python爬虫基础知识(二)--正则表达式
- python正则表达式相关总结
- Python中的正则表达式学习总结
- python 正则表达式 总结(一)
- python中的正则表达式笔记与总结
- 正则表达式学习总结(python版)
- 【正则表达式】python re模块用法总结
- 正则表达式总结 re (python演示)
- python之正则表达式的用法总结
- Python中正则表达式的用法总结
- python爬虫入门(1) 基础知识 ; 正则表达式 Re 模块
- 正则表达式基础知识 (转)
- 第6天 css的第一天
- 论文笔记之---Speed and accuracy trade-offs for modern convolutional object detectors
- sky3888 Register Famous Comic Story Jack Hammer Slot Game
- mysql复习笔记
- 纯css怎么控制一个div的高度跟随另外一个DIV高度发生变化
- Python正则表达式基础知识总结
- [UWP]附加属性2:实现一个Canvas
- java
- 程序员必懂的53个英文单词
- SpringMVC
- 知乎小白关于ctf竞赛训练 积累的资料
- html第四天
- 实验 1
- Hbase原理、基本概念、基本架构