Python 模式匹配与正则表达式
Posted 学习与BBB
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 模式匹配与正则表达式相关的知识,希望对你有一定的参考价值。
今天的内容可以说很多了。。。毕竟看书就看了两天。
7.2 用正则表达式来查找文本模式
正则表达式,简称regex,是文本模式的描述方法。
首先要导入re模块
phonenumRegex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
之后regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。如果没有则返回None,如果有则返回一个匹配对象。、
phonenumRegex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo=phonenumRegex.search(‘My number is 415-555-4242’)
print(‘Phone number found:’+mo.group())
Phone number found:415-555-4242
7.3 用正则表达式匹配更多模式
利用括号分组
(\d\d\d)-(\d\d\d-\d\d\d\d)
用管道匹配多个分组
字符“|”称为管道,希望匹配许多表达式中的一个时,就可以使用它。
例如:
r‘study|bbb’ 会匹配study或bbb。
如果你希望匹配studyy、studyyy、studyyyy中的任意一个,他们都以study开始
r‘study(y|yy|yyy)’
如果需要匹配 | ,则倒斜杠转义 \|
用问号实现可选匹配
spam=re.compile(r'study(bbb)?aaa')
dog=spam.search('studybbbaaa')
dog.group()
studybbbaaa
dog=spam.search('studyaaa')
dog.group()
sutdyaaa
(bbb)?表示bbb是可选的匹配,既匹配studybbbaaa也匹配studyaaa,bbb将出现0或1次。
星号匹配零次或多次
*意味着匹配多次或零次
r‘study(bbb)*’
意味着bbb可以不存在或出现一次与多次。
加号匹配一次或多次
与?*一样的用法,只不过匹配一次或多次,不能匹配0次
用花括号匹配特定次数
(b){3}表示匹配bbb,但不会匹配bb因为只出现了两次。
(b){3,5}匹配b出现三次到五次,bbb bbbb bbbbb都会匹配。
7.4 贪心和非贪心匹配
前面说(b){3,5},如果匹配 bbbbb 时返回的值是 bbbbb ,而不是bbb bbbb。
因为python的贪心匹配,在有多义的情况下,尽可能匹配最长的字符串。
如果是(b){3,5}?则变成非贪心,匹配尽可能短的字符串。
7.5 findall()方法
search返回第一次匹配的字符串。
findall将返回一组字符串,即所以匹配的字符串,并以元组的方式返回。
7.7 建立自己的字符分类
可以用[ ]定义自己的字符分类
[abc]会匹配abc,无论大小写。
如果在前面加上^,表示匹配不在这个字符中的所有字符
^[abc]会匹配除了大小写 abc 的所有字母
7.8 插入字符和美元字符
在正则表达式前面加上^,表明匹配必须发生在被查找文本的开头处。加上$则是末尾处。^与$可以一起使用。
r'^Hello'
7.9 通配字符
“ . ”句点表示通配符,匹配除了换行之外的所有字符。
r ' .at '
“ .* ”点星匹配任意文本。(除换行)
r'I.*' 表示I后面可以加任意文本。
可以匹配'I love you'
“.*”点星后面加re.DOTALL可以匹配包括换行的任意字符。
'.*,re.DOTALL'
7.11不区分大小写的匹配
加re.I
r'BbB,re.I'
7.12 用sub()替换字符串
namesRegex=re.compile(r'Agent \w+')
namesRegex.sub('censored','Agent Alice gave the secret documents to Agent Bob.')#用censored替换Agent
'censored gave the secret documents to censored.'
每次喝酒后撒酒疯的同学都在警醒着我别喝酒
以上是关于Python 模式匹配与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章