《Python编程快速上手》第七章 模式匹配与正则表达式

《Python编程快速上手》第七章 模式匹配与正则表达式
Ramsayi7.2 使用正则表达式的步骤
1.用 import re 导入正则表达式模块
2.用 re.compile()函数创建一个 Regex 对象(使用原始字符串 r'\d\d\d-\d\d\d-\d\d\d\d')
3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象
4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串
7.3 用正则表达式匹配更多模式
7.3.1 利用括号分组
r'(\d\d\d)-(\d\d\d-\d\d\d\d)
| 属性 | 描述 | 
|---|---|
| group() 或 group(0) | 返回整个匹配的文本 | 
| group(1) | 返回第 1 组匹配的文本 | 
| groups() | 返回所有的分组 | 
7.3.2 用管道匹配多个分组
r'Batman|Tina Fey' 将匹配’Batman’或’Tina Fey’
7.3.3 用问号实现可选匹配
?匹配零次或一次前面的分组。
7.3.4 用星号匹配零次或多次
*匹配零次或多次前面的分组。
7.3.5 用加号匹配一次或多次
+匹配一次或多次前面的分组。
7.3.6 用花括号匹配特定次数
{n}匹配 n 次前面的分组。
{n,}匹配 n 次或更多前面的分组。
{,m}匹配零次到 m 次前面的分组。
{n,m}匹配至少 n 次、至多 m 次前面的分组。
7.4 贪心和非贪心匹配
{n,m}?或*?或+?对前面的分组进行非贪心匹配。
7.5 findall()方法
search()将返回一个 Match 对象,包含被查找字符串中的“第一次”匹配的文本
findall()方法将返回一组 字符串,包含被查找字符串中的所有匹配。
如果在正则表达式中有分组,那么 findall 将返回元组的列表
7.6 字符分类
| 缩写字符分类 | 表示 | 
|---|---|
| \d | 0 到 9 的任何数字 | 
| \D | 除 0 到 9 的数字以外的任何字符 | 
| \w | 任何字母、数字或下划线字符(可以认为是匹配“单词”字符) | 
| \W | 除字母、数字和下划线以外的任何字符 | 
| \s | 空格、制表符或换行符(可以认为是匹配“空白”字符) | 
| \S | 除空格、制表符和换行符以外的任何字符 | 
7.7 建立自己的字符分类
字符分类[a-zA-Z0-9]将匹配所 有小写字母、大写字母和数字。
在方括号内,普通的正则表达式符号不会被解释
通过在字符分类的左方括号后加上一个插入字符(^),就可以得到“非字符类”。 非字符类将匹配不在这个字符类中的所有字符
7.8 插入字符和美元字符
可以在正则表达式的开始处使用插入符号(^),表明匹配必须发生在被查找文 本开始处。
再正则表达式的末尾加上美元符号($),表示该字符串必 须以这个正则表达式的模式结束。
7.9 通配字符
.(句点)字符称为“通配符”
7.9.1 用点-星匹配所有字符
点-星(.*)
点-星使用“贪心”模式:它总是匹配尽可能多的文本。
7.9.2 用句点字符匹配换行
通过传入 re.DOTALL 作为 re.compile()的第 二个参数,可以让句点字符匹配所有字符,包括换行字符。
7.10 正则表达式符号复习
| 缩写字符分类 | 表示 | 
|---|---|
| ? | 匹配零次或一次前面的分组。 | 
| * | 匹配零次或多次前面的分组。 | 
| + | 匹配一次或多次前面的分组。 | 
| {n} | 匹配 n 次前面的分组。 | 
| {n,} | 匹配 n 次或更多前面的分组。 | 
| {,m} | 匹配零次到 m 次前面的分组。 | 
| {n,m} | 匹配至少 n 次、至多 m 次前面的分组。 | 
| {n,m}?或*?或+? | 对前面的分组进行非贪心匹配。 | 
| ^spam | 意味着字符串必须以 spam 开始。 | 
| spam$ | 意味着字符串必须以 spam 结束。 | 
| . | 匹配所有字符,换行符除外。 | 
| \d、\w 和\s | 分别匹配数字、单词和空格。 | 
| \D、\W 和\S | 分别匹配出数字、单词和空格外的所有字符。 | 
| [abc] | 匹配方括号内的任意字符(诸如 a、b 或 c)。 | 
| [^abc] | 匹配不在方括号内的任意字符。 | 
7.11 不区分大小写的匹配
向 re.compile()传入 re.IGNORECASE 或 re.I,作为第二个参数
7.12 用 sub()方法替换字符串
Regex 对象的 sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹 配。第二个参数是一个字符串,即正则表达式。
7.13 管理复杂的正则表达式
向 re.compile() 传入变量 re.VERBOSE,作为第二个参数。
7.14 组合使用 re.IGNOREC ASE、re.DOTALL 和 re.VERBOSE
re.compile()函数只接受一 个值作为它的第二参数。可以使用管道字符(|)将变量组合起来,从而绕过这个限 制。管道字符在这里称为“按位或”操作符。
>>> someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL | re.VERBOSE)










