《Python编程快速上手——让繁琐工作自动化》
(《Automate the Boring Stuff with Python》)
刚看完第7章「模式匹配与正则表达式」,现在做一遍课后习题,不是标准答案哈,欢迎拍砖
第134页 7.17 习题
1、创建 Regex 对象的函数是什么?
向 re.compile() 传入一个字符串值,表示正则表达式,它将返回一个Regex 模式对象(或者就简称为 Regex 对象)。
2、在创建 Regex 对象时,为什么常用原始字符串?
因为正则表达式常常使用倒斜杠(也就是\),向 re.compile() 函数传入原始字符串就很方便,而不是输入额外的倒斜杠。 比如:想要查找
138-8888-8888 这种格式的手机号:
用原始字符串表示: |
输入 r’\d\d\d-\d\d\d\d-\d\d\d\d’ |
不用原始字符串表示: |
输入 '\\d\\d\\d-\\d\\d\\d\\d-\\d\\d\\d\\d’ |
显然,用原始字符串要简单得多。
3、search() 方法返回什么?
search() 方法查找传入的字符串,寻找该正则表达式的所有匹配。
- 如果字符串中含有该模式,search() 方法将返回一个 Match 对象。
- 如果字符串中没有找到该正则表达式模式,search() 方法将返回 None。
4、通过 Match 对象,如何得到匹配该模式的实际字符串?
Match 对象有一个 group() 方法,它返回被查找字符串中实际匹配的文本。
5、用 r’(\d\d\d)-(\d\d\d-\d\d\d\d)’ 创建的正则表达式中,分组 0 表示什么?分组 1 呢?分组 2 呢?
如果向 group() 方法传入 0 或者不传入参数,即 group(0) 或 group(),将返回整个匹配的文本。因此,分组 0
表示(\d\d\d)-(\d\d\d-\d\d\d\d)。分组 1 表示第一个括号中包含的内容,即(\d\d\d)。分组 2
表示第二个括号中包含的内容,即(\d\d\d-\d\d\d\d)。
6、括号和句点在正则表达式语法中有特殊的含义。如何指定正则表达式匹配真正的括号的句点字符?
需要在括号和句点前,加上倒斜杠(也就是\)进行转义。
7、findall()方法返回一个字符串的列表,或字符串元组的列表。是什么决定它提供哪种返回?
- 如果正则表达式没有分组,如\d\d\d-\d\d\d\d-\d\d\d\d,findall()将返回一个匹配字符串的列表。如[‘138-8888-8888’,
‘139-9999-9999’]。
- 如果正则表达式有分组,如(\d\d\d)-(\d\d\d\d)-(\d\d\d\d),findall()将返回一个字符串的元组的列表,每个分组对应一个字符串。如[(‘138’,‘8888’,‘8888’),
(‘139’,‘9999’,‘9999’)]。
8、在正则表达式中,|字符表示什么意思?
|字符叫做“管道”。如果希望匹配许多表达式中的一个时,可以使用它。如 r’beijing|shanghai|gaungzhou’。
9、在正则表达式中,?字符有哪两种含义?