Python基础 第七章

Python基础 第七章

7.1 基础概念

使用正则表达式查找文本: 正则表达式简称regex,\d是一个正则表达式,表示一位数字字符。
\d\d\d-\d\d\d-\d\d\d\d 表示三个数字,一个短横线,三个数字,一个短横线,四个数字的匹配对象,所有其他字符串都不能匹配以上的对象。
形如 \d{3}-\d{3}-\d{4}的格式,和以上格式表示查找同一对象。

创建正则表达式对象: 所有正则表达式对象都保存在re模块中,因此首先要载入对象 import re。

匹配regex对象: Regex使用search()方法查找传入的字符串,寻找该正则表达式的所有匹配。若未能查找到,则返回None。若找到了该对象,则返回一个Match对象。

案例:

>>>number = re.compile(r'\d\d\d=\d\d\d-\d\d\d')
>>>mo = number.search('my number is 415-123-323')
>>>print('number is :' + mo.group())
number is : 415-123-323

正则表达式匹配规则:

  1. 用import re 导入模块
  2. 用re.compile 创建一个Regex对象。
  3. 向Regex对象的search()方法传入想查找的字符串,返回一个match对象。
  4. 调用match对象的group()方法,返回实际匹配文本的字符串。

利用括号分组: 正则表达式中第一个括号内是第一组,第二个括号内是第二组。可向group函数传入不同的数字,可以取得匹配文本的不同部分。向group()传入0或不传入,则会获得整个匹配的文本。
也可以使用多重赋值,此时需要调用groups()

>>>a.groups()
('123','456')
>>>diyizu,dierzu = a.groups()
>>>print(diyizu)
123

使用管道分配多个分组: 字符|称为管道,希望匹配许多表达式中的一个时,即可以使用它。
例如,r ‘123|456’ 就将匹配 ‘123’ 或 ‘456’ 。

若两个对象都出现在被查找的字符串中,那么第一次出现的匹配文本,将作为match对象返回。

星号实现匹配0或多次: *意味着匹配0次或多次,即 * 以前的内容可以出现也可以不出现。

用+匹配一次或多次: *意味着匹配0次或多次,而+意味匹配1次或多次。*不要求出现在匹配的字符串中,而+意味至少出现一次。

贪心和非贪心匹配: Python默认的匹配原则是“贪心”的,表示在有二义的情况下,会尽量匹配最长的字符串。花括号的“非贪心”表示匹配尽可能短的字符串。

findall()方法: findall()将返回一组字符串,包含被查找字符串的所有匹配。
另外,findall()不是返回一个match对象,而是返回一个字符串列表。只要在正则表达式中没有分组,每个字符串都是一段被查找的文本。

插入字符和美元字符: 可以在正则表达式的开始处使用 ^ 表示匹配必须发生在被查找文本开始处,同样也可以在末尾加上$符号,表明字符串必须以这个正则表达式的模式结束。可以同时使用 ^ 和 $ ,表明整个字符串必须匹配整个模式。

通配字符: 在正则表达式中,“.”称为“通配符”,匹配除了换行符之外的所有字符。

语法汇总:
?匹配0次或1次
*匹配0次或多次
+匹配1次或多次
{n}匹配n次前面的分组
{n,}匹配n次或更多前面的分组
{,m}匹配0到m次前面的分组
{n,m}匹配至少n次,至多m次前面的分组
{n,m}?表示非贪心匹配
^spam表示必须以spam开始
spam$表示必须以spam结束

7.2 习题

1、向 re.compile() 传入一个字符串值,表示正则表达式,它将返回一个Regex 模式对象(或者就简称为 Regex 对象)。

2、因为正则表达式常常使用倒斜杠,向 re.compile() 函数传入原始字符串更为方便,而不是输入额外的倒斜杠。 。

3、search() 方法查找传入的字符串,寻找该正则表达式的所有匹配。

如果字符串中含有该模式,search() 方法将返回一个 Match 对象。
如果字符串中没有找到该正则表达式模式,search() 方法将返回 None。

4、Match 对象有一个 group() 方法,它返回被查找字符串中实际匹配的文本。

5、如果向 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、如果正则表达式没有分组,如\d\d\d-\d\d\d\d-\d\d\d\d,findall()将返回一个匹配字符串的列表。

8、|字符叫做“管道”。如果希望匹配许多表达式中的一个时,可以使用它,如:r’beijing|shanghai|gaungzhou’。

9、? 字符可以表示“匹配前面分组0 次或1 次”,或用于表示贪心配。

10、+匹配1 次或多次。匹配0 次或多次。

11、{3}匹配前面分组的精确3 次实例。{3, 5} 匹配3 至5 次实例。

12、缩写字符分类\d、\w 和\s 分别匹配一个数字、单词或空白字符。

13、缩写字符分类\D、\W 和\S 分别匹配一个字符,它不是数字、单词或空白字符。

14、将re.I 或re.IGNORECASE 作为第二个参数传入re.compile(),让匹配不区分大小写。

15、字符.通常匹配任何字符,换行符除外。如果将re.DOTALL 作为第二个参数传入re.compile(),那么点也会匹配换行符。

16、执行贪心匹配,.?执行非贪心匹配。

17、[a-z0-9]或[0-9a-z]

18、‘X drummers, X pipers, five rings, X hens’

19、re.VERBOSE 参数忽略正则表达式字符串中的空白符和注释

20、re.compile(r’^\d{1,3}(,{3})$’)

21、re.compile(r’[A-Z][a-z]*\sNakamoto’)

22、re.compile(r’([^Alice|Bob|Carol])\s([eat|pets|throws])\s[apples|cats|baseballs].’,re.IGNORECASE)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值