python3 正则表达式(更新中)

1、特殊符号(先解释,后面会有例子)

表示描述
re1|re2或的关系
.匹配任何字符(\n除外),要显示的匹配.号,需要加\|
^匹配字符串的开头
$匹配字符串的结尾
*匹配0次或多次前面出现的正则表达式
+匹配1次或者多次前面出现的正则表达式
匹配0次或者一次(一句话,就是匹配越少越好)
{N}重复N次前面出现的正则表达式
{M,N}匹配M~N次前面出现的正则
【abcd】匹配集合中某一个元素
【x-y】匹配x~y范围内任意的一个字符(如【A-Za-z】匹配大小写
【^……】不匹配集合里的字符(切记:^【……】意义是匹配以集合元素开头的)
注意直接使用\…的时候是在用r‘\……’情况使用的,不用r是要用\……才能使用
\d匹配十进制数字
\w匹配任何字母数字
\s匹配任何空字符(\S与之相反)
\N匹配已经保存的子组
\A和^一个意思
\Z和$一个意思
(?=.com)如何一个字符串跟着.com才做匹配操作
(?!.net)如何一个字符串后面不是跟着.net才做匹配操作
(?(1)y|x)如果一个匹配组(1)存在,就和y匹配,否则和x匹配

2、re模块函数

函数方法描述
compile(str,flags)预编译一个正则模式,返回正则表达式对象
match(pattern,str,flags)从头开始按照pattern模式匹配str
search(pattern,str,flags)随意按照pattern模式查找str
findall(pattern,string,flags)查找字符串中所有非重复出现的正则表达式模式,并返回一个列表
finditer(pattern,string,flags)与findall()一样,只是返回一个迭代器
sub(patter,repl,string,count)使用repl替换所有正则在string中出现的位置,如果没有count就会替换所有
(?iLmsux)部分详细解释下列属性
re.I、re.IGNORECASE不区分大小写的匹配
re.M、re.MULTLINE根据^和$的开始和结束来匹配

3、使用match()方法匹配字符串

>>>import re
>>>m = re.match('foo','food on the table')
>>>m.group()#group()返回匹配对象
'foo'

4、使用search()方法查找

>>>import re
>>>m = re.rearch('foo',seafood')
>>>m.group()
'foo'

5、匹配多个字符串

>>>bt ='bat|bet|bit'
>>>m = re.match(bt,'bat')
>>>m.group()
'bat'

6、匹配单个字符

>>>anyend = '.end'
>>>m = re.match(anyend,'bend')
>>>m.group()
'bend'

7、创建字符集【】

>>>m = re.match('[cr][23][dp][o2]','c3po')
>>>m.group()
'c3po'

8、group()和groups()区别

#一个括号代表一个组
#groups返回一个元祖
>>>m = re.match('(\w\w\w)-(\d\d\d)','abc-123')
>>>m.group()
'abc-123'
>>>m.group(1)
'abc'
>>>m.group(2)
'123'
>>>m.groups()
('abc','123')

9、findall查找所有的,finditer迭代

>>>re.findall(r'(th\w+)','This and that,re.I)
#re.I忽略大小写,r是使用原生字符
['This','that']
>>>it = re.finsiter(r'th\w+)','This and that',re.I)
>>> g = it.__next__()
>>>g.groups()
('This',)
>>g.group(1)
'This'
>>>g = it.__next__()
>>>g.groups()
('that',)

10、使用sub()和subn()搜索和替换

>>>re.sub('X','Mr.Smith','attn:X',\n')
'attn:Mr.Smith,\n'
#subn会返回('attn:Mr.Smith,\n',1),替换了一次
#\N是分组编号
>>>re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4}',
... r'\2/\1/\3','2/20/91')
'20/2/91'
#替换的结果就是结果的第一个组变成第二个组,第二个组变成第一个

11、贪婪与不贪婪

#贪婪
>>>pat = '.+\d+-\d+-\d+'
>>>date = 'Thu Feb 15 17:46:04 2007::uziff@jiojf.g::1212345-6-8'
>>>re.search(pat,date).group()
'Thu Feb 15 17:46:04 2007::uziff@jiojf.g::1212345-6-8'
#不贪婪
>>>pat = '.+?\d+-\d+-\d+'
...
...
>>>re.search(pat,date).group()
'1212345-6-8'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值