【Python3 爬虫】U19_正则表达式之re模块其他函数

re模块有以下这些函数:

  • compile用于编译正则表达式,生成一个Pattern对象
  • match方法:从开始位置开始查找,一次匹配
  • search方法:从任何位置开始查找,一次匹配
  • findall方法:全部匹配,返回列表
  • finditer方法:全部匹配,返回跌代器
  • split方法: 分割字符串,返回列表
  • sub方法:替换

使用re模块的步骤

a. 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象
b. 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果,一个 Match 对象。
c. 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作

1.compile方法

对于一些经常要用到的正则表达式,可以使用complie进行编译,然后在使用的时候可以直接拿过来用,执行效率会更快。而且compile还可指定flag=re.VERBOSE,在写正则表达式的时候做好注释,案例如下:

import re
text = 'the price is 19.5'
pat = re.compile(r"""
                \d+ # 小数点前面的数字
                \.? # 小数点
                \d+ # 小数点后面的数字
                """,re.VERBOSE)
ret = re.search(pat,text)
print(ret.group())

打印结果:19.5

2.findall方法

findall可以获取所有的匹配结果并且返回一个列表,案例如下:

import re
text = "Apple's price is $19,Orange's price is $20"
ret = re.findall('\$\d+',text)
print(ret)

打印结果:['$19', '$20']

3.finditer方法

finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。

import re
text = "Apple's price is $19,Orange's price is $20"

rets = re.finditer('\$\d+',text)
for ret in rets:
    print(ret.group())

打印结果:
$19
$20

4.split方法

split 方法按照能够匹配的子串将字符串分割后返回列表,实战案例如下:

import re
text = "hello china ni hao"
ret = re.split('[^a-zA-z]',text)
print(ret)

打印结果:['hello', 'china', 'ni', 'hao']

5.sub方法

sub方法用来替换字符串,将匹配到的字符串替换为其他字符串。

import re
text = "Apple's price is $19,Orange's price is $20"
ret = re.sub('\$\d+','0',text)
print(ret)

6.实战案例:去掉标签<>取内容

import re
text = "<li title='as'>ISBN:12334</li>"
ret = re.sub('<.+?>',"",text).replace("ISBN:","")
print(ret)

输出结果:12334

上述代码也可以指定替换标签的数量,例如:只想替换第一个标签

import re
text = "<li title='as'>ISBN:12334</li>"
ret = re.sub('<.+?>',"@@@",text,1)
print(ret)

打印结果:@@@ISBN:12334

从上述例子可以看到可以通过指定替换的数量根据自己需要进行替换

posted @ 2020-04-02 14:38  OLIVER_QIN  阅读(288)  评论(0编辑  收藏  举报