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 模式匹配与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

兄弟连学Python(06)---- 正则表达式匹配规则

python正则表达式

Python基础语法 - 正则表达式

python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用

剑指Offer-正则表达式匹配(Python)

学不会的python之正则表达式详解(re模块)