python爬虫之正则表达式学习笔记一

来源:互联网 发布:java重定向设置cookie 编辑:程序博客网 时间:2024/05/22 02:22

学习爬虫一段时间了,觉得学正则表达式是个好的契机,

作为一个大二学生平时课太多,希望通过这种方式提高复习效率...

import re                                                                                   #re模块为正则表达式子专用
>>> re.search(r'love','i love you')                                          #引号里为想查找的字符串
<_sre.SRE_Match object; span=(2, 6), match='love'>    #结果显示找到,‘love’在2到6的位置。

>>> re.search(r'.','i love you')                                                #   .   代表通配符,所以之后结果显示第一个字母i

<_sre.SRE_Match object; span=(0, 1), match='i'>
>>> re.search(r'yo.','i love you')
<_sre.SRE_Match object; span=(7, 10), match='you'>
>>> re.search(r'\.','i love. you')                                              #在  .  前面加\ ,即可转义,查找字符串中有  .  的位置
<_sre.SRE_Match object; span=(6, 7), match='.'> 
>>> re.search(r'\d','i love. 123 you')                                    #  \d 即为所有数字,结果为找到1。(注意这个返回结果只返回一个)
<_sre.SRE_Match object; span=(8, 9), match='1'>
>>> re.search(r'\d\d\d','i love. 123 you')                              #若想返回多个数,就多写几个\d。
<_sre.SRE_Match object; span=(8, 11), match='123'>
>>> re.search(r'\d\d\d\.\d\d\d.\d\.\d','161.123.1.1')             #一个查找ip地址的例子
<_sre.SRE_Match object; span=(0, 11), match='161.123.1.1'>
>>> re.search(r'[abcde]','i love you')
<_sre.SRE_Match object; span=(5, 6), match='e'> 

>>> re.search(r'[123]','i love. 123 you')                                 #  [ ]   里可以加数字,但结果仍然只查找第一个符合 [ ] 标准的
<_sre.SRE_Match object; span=(8, 9), match='1'>
>>> re.search(r'[a-z]','i love. 123 you')                                   # [ ]  里也可以加范围,字母数字的都可以
<_sre.SRE_Match object; span=(0, 1), match='i'>
>>> re.search(r'[1-2]','i love. 123 you')
<_sre.SRE_Match object; span=(8, 9), match='1'>
>>> re.search(r'[3-4]','i love. 123 you')
<_sre.SRE_Match object; span=(10, 11), match='3'>
>>> re.search(r'3{3}','i love. 12333 you')                              #  { }  里可加中括号前面这个字符的重复次数
<_sre.SRE_Match object; span=(10, 13), match='333'>
>>> re.search(r'3{3}','i love. 123333 you')
<_sre.SRE_Match object; span=(10, 13), match='333'>

-------------------------------那么如何查找0~255中的数字呢,比如188------------------------------

>>> re.search(r'[01]\d\d|2[0-4]]\d|25[0-5]','188')                  #如果百位数字是0或者1,那么之后两位就无所谓了;如果百位是2,那么十位在0-4的情况下个位就无所谓了;如果
<_sre.SRE_Match object; span=(0, 3), match='188'>      #十位为5,那么各位就只能在0-5之间了。结果显示成功查找到188(注意  |   为逻辑或)

------------------------------------------接下来匹配一个ip地址----------------------------------------------

>>> re.search(r'(([01]\d\d|2[0-4]\d|25[0-5])\.){3}([01]\d\d|2[0-4]\d|25[0-5])','192.168.123.123')     #方式类似于上个例子,但是有个问题在于ip地址不一定都是三位的。
<_sre.SRE_Match object; span=(0, 15), match='192.168.123.123'>

>>> re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{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'>

----------------------------------------------------------------------------------------------------------------------

1 0