第五十七课:论一只爬虫的自我修养:正则表达式

内容来源于网络,本人只是在此稍作整理,如有涉及版权问题,归小甲鱼官方所有。

0.请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

  • re模块
>>> import re
>>> re.search(r'FishC', 'I love FishC.com!')

search()方法用于在字符串中搜索正则表达式模式第一次出现的位置,如果找到了,匹配的位置是(7,12)。
这里需要注意两点:
1️⃣第一个参数是正则表达式模式,也就是你要描述的搜索规则,需要使用原始字符串来写,这样可以避免很多不必要的麻烦。
2️⃣找到后返回的范围是以下标0开始的,这跟字符串一样。如果找不到,返回None。


  • 通配符
>>> re.search(r'.', 'I love FishC.com!')

>>> re.search(r'Fish.', 'I love FishC.com!')

点号(.)来表示可以匹配除了换行符之外的任何字符,其他的后面具体介绍。


  • 反斜杠
>>> re.search(r'\.', 'I love FishC.com!')

反斜杠剥夺元字符(.)的特殊能力。

>>> re.search(r'\d', 'I love 123 FishC.com!')

同样,反斜杠也可以使得普通字符拥有特殊能力。


  • 字符类
>>> re.search(r'[aeiou]', 'I love 123 FishC.com!')

使用中括号将任何内容包起来就是一个字符类,它的含义是你只要匹配这个字符类中的任何字符,结果就算作匹配。
注意:默认区分大小写。

>>> re.search(r'[aeiouAEIOU]', 'I love 123 FishC.com!')

>>> re.search(r'[a-z]', 'I love 123 FishC.com!')

>>> re.search(r'[0-2][0-5][0-5]', 'I love 123 FishC.com!')


  • 重复匹配
>>> re.search(r'ab{3}c', 'abbbc')

用大括号这个元字符来实现重复匹配的功能。

>>> re.search(r'ab{3}c', 'abbbbbc')
>>> 

超过3个或者少于3个都不能匹配。

>>> re.search(r'ab{3,5}c', 'abbbc')

>>> re.search(r'ab{3,5}c', 'abbbbc')

>>> re.search(r'ab{3,5}c', 'abbbbbc')

重复的次数也可以取一个范围。
请问如何用正则表达式匹配0~255这个范围的数??
有些朋友可能想都不想就会这样写:

>>> re.search(r'[0-255]','188')
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.search(r'[0-2][0-5][0-5]','188')
>>> 

要注意,[0-255]这个字符类表示0~2还有两个5,所以匹配0125四个数字中任何一个。
正则表达式应该这样写:

>>> re.search(r'[0-1]\d\d|2[0-4]\d|25[0-5]', '188')
<_sre.SRE_Match object; span=(0, 3), match='188'>

分几种情况:

1.百位可能是0或1,当百位是0或1时,个位和十位任意;
2.当百位是2时,十位是0-4,个位任意;
3.当百位是2,十位是5时,个位是0-5;
下面写一个匹配ip地址的:

>>> re.search(r'(([0-1]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([0-1]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','192.168.1.1')
<_sre.SRE_Match object; span=(0, 11), match='192.168.1.1'>

其中{3}表示重复3次;其中小括号表示分组的意思,一个小组就是一个整体。{0,1}表示重复0次(没有)或者1次。


你可能感兴趣的:(第五十七课:论一只爬虫的自我修养:正则表达式)