python中re模块的基本使用

写在前面的话上一篇文章我们利用urllib进行了一些爬虫小实验,但是想要更顺利的深入爬虫学习,了解一些解析网页的方法肯定是必须的,所以接下来我们就一起来学习re模块的基础使用方法吧

温馨提示:想要了解更规范的官方说明,可参考文档:https://docs.python.org/3/library/re.html

一、正则表达式简介

什么是正则表达式呢?我们先来看一下百度百科上的解释:

正则表达式是对字符串操作的一种逻辑公式,它用事先定义好的一些特定字符及这些特定字符的组合组成一个规则字符串,用来表达对字符串的一种过滤逻辑

简单来说,正则表达式(Regular Expression )就是一个用于匹配字符串的特殊的字符序列,可以高效的提取出需要的文本内容,而Python中的re模块就是专门用于处理正则表达式的一个模块

这里先给大家推荐一个用于检测正则表达式的网站:http://tool.oschina.net/regex,它不仅可以检测正则表达式的准确性,还提供了一些常用的正则表达式匹配模式,可以算得上是一个十分实用的工具网站了

二、正则表达式中的特殊符号

符号 描述
. 匹配除换行符之外的所有字符
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
[ ] 匹配所包含的任意一个字符,若连字符(-)出现在字符串中间则表示范围,出现在首位则作普通字符;若脱字符(^)出现在字符串首位则表示排除,出现在中间则作普通字符
{ } {M, N}表示匹配字符串M~N次;{M,}表示匹配字符串至少M次,{,N}表示匹配字符串至多N次,{N}表示匹配字符串N次
* 匹配前面字符串零次或多次,在后面加上?表示启用非贪婪模式匹配(默认为贪婪模式)
+ 匹配前面字符串一次或多次,在后面加上?表示启用非贪婪模式匹配(默认为贪婪模式)
? 匹配前面字符串零次或一次,在后面加上?表示启用非贪婪模式匹配(默认为贪婪模式)
\b 匹配一个单词边界,单词被定义成Unicode的字母数字或下横线字符
\B 与\b相反
\d 对于Unicode(str)模式,匹配任何数字字符,包括 [0-9]以及其它数字字符,如果开启了re.ASCII标志,只匹配 [0-9];对于8-bit(bytes)模式,匹配 [0-9]
\D 与\d相反
\s 对于Unicode(str)模式,匹配任何空白字符,包括 [\t\n\r\f\v]以及其它空白字符,如果开启了re.ASCII标志,只匹配 [\t\n\r\f\v];对于8-bit(bytes)模式,匹配 [\t\n\r\f\v]
\S 与\s相反
\w 对于Unicode(str)模式,匹配任何单词字符,包括 [a-zA-Z0-9_]以及其它单词字符,如果开启了re.ASCII标志,只匹配 [a-zA-Z0-9_];对于8-bit(bytes)模式,匹配 [a-zA-Z0-9_]
\W 与\w相反

三、正则表达式中的常用方法

1. re.compile(pattern, flags=0)

编译正则表达式模式为正则表达式对象,通常情况下,如果需要重复使用某个正则表达式,那么可以先将该正则表达式编译成模式对象

pattern :匹配模式,建议用原始字符串表示,可省去许多不必要的麻烦

flags :标志位,用于控制正则表达式的匹配方式,可选参数如下,多个参数之间用|分割:

  • re.I:不区分大小写的匹配
  • re.L:取决于当前语言环境的匹配
  • re.M:多行匹配
  • re.S:使 . 匹配包括换行在内的所有字符
  • re.U:取决于Unicode字符集的匹配

另外值得注意的是,该方法返回的是一个正则表达式对象,常用方法如下:

  • object.search(string[, pos[, endpos]]):用object中的匹配模式匹配string并返回匹配对象,用pos和endpos表示匹配的范围
  • object.findall(string[, pos[, endpos]]):用object中的匹配模式匹配string并返回列表,用pos和endpos表示匹配的范围
  • object.start([group]):返回匹配开始的位置
  • object.end([group]):返回匹配结束的位置
  • object.span([group]):返回匹配的范围
  • object.group(num=0):返回对象所匹配的字符串,若对象中有子组,则加上num参数可获取相应子组

2. re.search(pattern, string, flags=0)

在string中搜索第一次出现的pattern,flags表示标志位,该方法返回匹配内容的正则表达式对象

扫描二维码关注公众号,回复: 2762758 查看本文章
>>> import re
>>> result = re.search(r'\d+', "123abc456")
>>> type(result)     #查看result的类型
<class '_sre.SRE_Match'>
>>> result.span()     #查看匹配的起始位置
0
>>> result.span()     #查看匹配的结束位置
3
>>> result.span()     #查看匹配的范围
(0, 3)
>>> result.group(0)     #查看匹配的子组
'abc'

3. re.findall(pattern, string, flags=0)

在string中搜索所有符合的pattern,flags表示标志位,一般情况下,该方法返回匹配内容的列表

>>> import re
>>> result = re.findall(r'\d+', "123abc456")
>>> type(result)     #查看result的类型
<class 'list'>
>>> for item in result:
        print(item)
123
456

写在后面的话 :现在我们已经学习完urllib和re模块的基础使用方法了,下一篇文章我们将利用它们进行一个基础的爬虫实战训练,谢谢大家

猜你喜欢

转载自www.cnblogs.com/wsmrzx/p/9476068.html