前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python正则表达式

Python正则表达式

作者头像
罗罗攀
发布2021-01-29 10:50:16
3550
发布2021-01-29 10:50:16
举报

前言

前文介绍了正则表达式的定义和使用方法,今天我们就正式讲解Python中是如何使用正则表达式的,最后,通过一个简单的正则表达式运用,爬取网络中的网页数据。

re库使用

在Python中使用正则表达式,需要re这个第三方库,这个库是python自带的,不需要自己安装。

re库中有很多函数方法供我们使用,我们就一一简单介绍下使用方法。

match函数

从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match就返回none。

代码语言:javascript
复制
re.match(pattern, string, flags=0)
  • pattern:匹配的正则表达式
  • string:匹配的字符串
  • flags:标志位,用于控制正则表达式的匹配方式

其实flags就是我们前文中说的可选标记(修饰符),如果需要使用多个修饰符,可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志。

我们来看下案例:

代码语言:javascript
复制
import re

text = 'Welcom to Wuhan'
print(re.match('welcom',text,re.I))
print(re.match('welcom',text,re.I).group())
print(re.match('welcom',text,re.I).span())
print(re.match('to',text))

# <re.Match object; span=(0, 6), match='Welcom'>
# Welcom
# (0, 6)
# None

该函数返回的是个对象(包括匹配的子字符串和在句中的位置索引),如果只需要子字符串,需要用 group() 函数,索引用span()函数。

search函数

不同于match函数,search函数扫描整个字符串并返回第一个成功的匹配。

代码语言:javascript
复制
re.search(pattern, string, flags=0)
代码语言:javascript
复制
import re

text = 'Welcom to Wuhan'
print(re.search('welcom',text,re.I))
print(re.search('to',text))

#<re.Match object; span=(0, 6), match='Welcom'>
# <re.Match object; span=(7, 9), match='to'>
findall函数

这个函数是我们经常要使用的函数,使用率极高,他在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

代码语言:javascript
复制
findall(pattern, string, flags=0)
代码语言:javascript
复制
import re

text = '123abc456dfg'
result = re.findall("\d+", text)
print(result)

# ['123', '456']
finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

代码语言:javascript
复制
re.finditer(pattern, string, flags=0)
代码语言:javascript
复制
import re

text = '123abc456dfg'
result = re.finditer("\d+", text)
for i in result:
    print(i.group())

# 123
# 456
sub函数

将符合的匹配项替换成其他的字符串。

代码语言:javascript
复制
re.sub(pattern, repl, string, count=0, flags=0)
代码语言:javascript
复制
import re

text = '123abc456dfg'
result = re.sub("\d+", '---', text)
print(result)

# ---abc---dfg
split函数

split 方法按照能够匹配的子串将字符串分割后返回列表。

代码语言:javascript
复制
re.split(pattern, string[, maxsplit=0, flags=0])
代码语言:javascript
复制
import re

text = '123abc456dfg'
result = re.split("\d+", text)
print(result)

# ['', 'abc', 'dfg']
compile函数

这个函数会返回一个正则表达式( Pattern )对象,供其他函数使用。多次使用某个正则表达式时推荐使用正则对象Pattern 以增加复用性。

代码语言:javascript
复制
import re

text = '123abc456dfg'
pattern = re.compile("\d+")
result = pattern.findall(text)
print(result)

# ['123', '456']

爬虫小案例

其实我们在爬虫时,用的最多的就是findall函数,我们以糗事百科的段子为例(https://www.qiushibaike.com/text/)。

我们需要获取每个发段子的用户名称,我们打开网页的源代码,可以发现所有的用户名称都在h2标签中。

所以,我们的正则表达式写成下面的样子

代码语言:javascript
复制
<h2>(.*?)</h2>

最终的代码如下:

代码语言:javascript
复制
import requests
import re

url = 'https://www.qiushibaike.com/text/'
res = requests.get(url)
names = re.findall("<h2>(.*?)</h2>",res.text,re.S)
print(names)

学到这里,我希望读者可以举一反三,把这个爬虫代码完善哦~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • re库使用
    • match函数
      • search函数
        • findall函数
          • finditer函数
            • sub函数
              • split函数
                • compile函数
                • 爬虫小案例
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档