返回顶部
首页 > 资讯 > 后端开发 > Python >Python正则表达式re模块讲解以及其案例举例
  • 866
分享到

Python正则表达式re模块讲解以及其案例举例

2024-04-02 19:04:59 866人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、re模块简介二、正则表达式的基本概念1、正则表达式的语法介绍:2、python中的正则表达式模块3、re模块的部分方法三、正则表达式使用的实例总结一、re模块简介 Pytho

一、re模块简介

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。

二、正则表达式的基本概念

所谓的正则表达式,即就是说:

通过设定匹配的字符串的格式来在一个文本中找出所有符合该格式的一串字符。

1、正则表达式的语法介绍:

1)特殊字符:

, ., ^, $, {}, [], (), | 等

以上的特殊字符必须使用\来转义,这样才能使用原来的意思。

2)字符类

[] 中的一个或者是多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。

字符类的范围可以进行指定。

比如:

1> [a-zA-Z0-9]表示从a到z,从A到Z,0到9之间的任意一个字符;

2> 左方括号后面可以跟随一个 ^ ,表示否定一个字符类,字符类在匹配时如果没有指定量词则匹配其中一个;

3> 字符类的内部,除了 \ 之外,其他的特殊符号不在为原来的意思;

4> ^ 放在开头表示否定,放在其他位置表示自身。

3)速记法

. ------可以匹配换行符之外的任何一个字符

  • \d ------匹配一个Unicode数字
  • \D ------匹配一个Unicode非数字
  • \s ------匹配Unicode空白
  • \S ------匹配Unicode非空白
  • \w ------匹配Unicode单词字符
  • \W ------匹配Unicode非单字符
  • ? ------匹配前面的字符0次或者1次
  • *------匹配前面的字符0次或者多次
  • +(加号)------匹配前面的字符1次或者多次
  • {m} ------匹配前面的表达式m次
  • {m, } ------匹配前面的表达式至少m次
  • {, n} ------匹配前面的表达式最多n次
  • {m, n} ------匹配前面的表达式至少m次,最多n次
  • () ------捕获括号内部的内容

2、Python中的正则表达式模块

Python中对于正则表达式的处理使用的是re模块,其中的语法可以参加上面所罗列出来的基本语法,尤其应该注意一下上述的 3)速记法 中的内容。因为在爬虫后需要数据分析时,往往会用到上面 3) 速记法 中所罗列出来的那些语法。

3、re模块的部分方法

1)re.compile()

我们首先在cmd中查看一下 re.compile() 方法的使用方法:

>>> import re
>>> help(re.compile)
Help on function compile in module re:

compile(pattern, flags=0)
    Compile a regular expression pattern, returning a pattern object.

>>>

Compile a regular expression pattern, returning a pattern object.

的意思如下所示:

编译常规表达模式,返回模式对象。

使用re.compile(r, f)方法生成正则表达式对象,然后调用正则表达式对象的相应方法。这种做法的好处是生成正则对象之后可以多次使用。

2)re.findall()

同样的,我们先看help

>>> help(re.findall)
Help on function findall in module re:

findall(pattern, string, flags=0)
    Return a list of all non-overlapping matches in the string.

    If one or more capturing groups are present in the pattern, return
    a list of groups; this will be a list of tuples if the pattern
    has more than one group.

    Empty matches are included in the result.

注意这一段话:

Return a list of all non-overlapping matches in the string.

If one or more capturing groups are present in the pattern, return
a list of groups; this will be a list of tuples if the pattern
has more than one group.

Empty matches are included in the result.

意思是说:

re.findall(s,start, end)

返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,
如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容,但是没有返回整个正则表达式匹配的内容。

3)re.finditer()

>>> help(re.finditer)
Help on function finditer in module re:

finditer(pattern, string, flags=0)
    Return an iterator over all non-overlapping matches in the
    string.  For each match, the iterator returns a match object.

    Empty matches are included in the result.

re.finditer(s, start, end)

返回一个可迭代对象

对可迭代对象进行迭代,每一次返回一个匹配对象,可以调用匹配对象的group()方法查看指定组匹配到的内容,0表示整个正则表达式匹配到的内容

4) re.search()

>>> help(re.search)
Help on function search in module re:

search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern, returning
    a match object, or None if no match was found.

re.search(s, start, end)

返回一个匹配对象,倘若没匹配到,就返回None

search方法只匹配一次就停止,不会继续往后匹配

5)re.match()

>>> help(re.match)
Help on function match in module re:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found.

re.match(s, start, end)

如果正则表达式在字符串的起始处匹配,就返回一个匹配对象,否则返回None

6) re.sub()

>>> help(re.sub)
Help on function sub in module re:

sub(pattern, repl, string, count=0, flags=0)
    Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the match object and must return
    a replacement string to be used.

re.sub(x, s, m)

返回一个字符串。每一个匹配的地方用x进行替换,返回替换后的字符串,如果指定m,则最多替换m次。对于x可以使用/i或者/gid可以是组名或者编号来引用捕获到的内容。

模块方法re.sub(r, x, s, m)中的x可以使用一个函数。此时我们就可以对捕获到的内容推过这个函数进行处理后再替换匹配到的文本。

7) re.subn()

>>> help(re.subn)
Help on function subn in module re:

subn(pattern, repl, string, count=0, flags=0)
    Return a 2-tuple containing (new_string, number).
    new_string is the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in the source
    string by the replacement repl.  number is the number of
    substitutions that were made. repl can be either a string or a
    callable; if a string, backslash escapes in it are processed.
    If it is a callable, it's passed the match object and must
    return a replacement string to be used.

rx.subn(x, s, m)

与re.sub()方法相同,区别在于返回的是二元组,其中一项是结果字符串,一项是做替换的个数

8) re.split()

>>> help(re.split)
Help on function split in module re:

split(pattern, string, maxsplit=0, flags=0)
    Split the source string by the occurrences of the pattern,
    returning a list containing the resulting substrings.  If
    capturing parentheses are used in pattern, then the text of all
    groups in the pattern are also returned as part of the resulting
    list.  If maxsplit is nonzero, at most maxsplit splits occur,
    and the remainder of the string is returned as the final element
    of the list.

re.split(s, m)

分割字符串,返回一个列表,用正则表达式匹配到的内容对字符串进行分割

如果正则表达式中存在分组,则把分组匹配到的内容放在列表中每两个分割的中间作为列表的一部分

三、正则表达式使用的实例

我们就爬一个虫来进行正则表达式的使用吧:

爬取豆瓣电影的Top250榜单并且获取到每一部电影的相应评分。

import re
import requests
if __name__ == '__main__':
    """
    测试函数(main)
    """
    N = 25
    j = 1
    for i in range(0, 226, 25):
        url = f'https://movie.douban.com/top250?start={i}&filter='
        headers = {
            'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 '
                          '(Khtml, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'
        }
        response = requests.get(url=url, headers=headers)
        result = re.findall(r'<a href="(\S+)">\s+'
                            r'<img width="100" alt="(\S+)" src="\S+" class="">\s+'
                            r'</a>', response.text)
        for movie in result:
            url_0 = movie[0]
            response_0 = requests.get(url=url_0, headers=headers)
            score = re.findall(r'<strong class="ll rating_num" property="v:average">(\S+)'
                               r'</strong>\s+'
                               r'<span property="v:best" content="10.0"></span>',
                               response_0.text)[0]
            print(j, end='  ')
            j += 1
            print(movie[1], end='  ')
            print(movie[0], end='  ')
            print(f'评分 : {score}')
        i += N

在这里,我们的正则表达式用来提取了电影名称、电影的url链接,然后再通过访问电影的url链接进入电影的主页并获取到电影的评分信息。
主要的正则表达式使用代码为:

1、获取电影名称以及电影url:

result = re.findall(r'<a href="(\S+)">\s+'
                            r'<img width="100" alt="(\S+)" src="\S+" class="">\s+'
                            r'</a>', response.text)

2、获取电影的相应评分:

score = re.findall(r'<strong class="ll rating_num" property="v:average">(\S+)'
                               r'</strong>\s+'
                               r'<span property="v:best" content="10.0"></span>',
                               response_0.text)[0]

最后我们需要再说一下,这里爬虫的美中不足的地方就是这个接口似乎不能够爬取到250了,只能爬取到248个电影,这个应该只是接口的问题,但是影响不是很大啦。

如下图所示:

正则表达式的简介我也就写到这里就结束了啦,希望对大家有所帮助啦。

当然我为了写这篇博文中的豆瓣爬虫,已经被豆瓣封了;

至于 403 错误是因为:访问的端口被禁止,或者原来的端口被修改所致。

这里显然是我被禁止了。

总结

到此这篇关于Python正则表达式re模块讲解以及其案例举例的文章就介绍到这了,更多相关Python re模块案例内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python正则表达式re模块讲解以及其案例举例

本文链接: https://lsjlt.com/news/120670.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python正则表达式re模块讲解以及其案例举例
    目录一、re模块简介二、正则表达式的基本概念1、正则表达式的语法介绍:2、Python中的正则表达式模块3、re模块的部分方法三、正则表达式使用的实例总结一、re模块简介 Pytho...
    99+
    2024-04-02
  • python re模块 正则表达式
    导航: 1、正则表达式元字符2、预定义字符集3、re模块常用函数4、注意事项 正则表达式在很多语言里都支持,python也不例外,re模块就是正则表达式的应用 正则表达式对字符串的逻辑操作,主要是对字符串的一种过滤,用“元字符” 与“普通...
    99+
    2023-01-30
    模块 正则表达式 python
  • python正则表达式模块re
    正则表达式的特殊元素 匹配符号 描述 '.'(点dot) 在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符 '^'(Caret) 匹配以字符串开头,...
    99+
    2023-01-30
    模块 正则表达式 python
  • python--模块之re正则表达式
    简介: 正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。 正则表达式基础知识: --普通字符匹配自身 abc ----abc --元字符 . :匹...
    99+
    2023-01-30
    模块 正则表达式 python
  • python模块之re(正则表达式)
    匹配模式 re.ASCII同re.A,对应的内联标识为(a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。 re.DE...
    99+
    2023-01-31
    模块 正则表达式 python
  • python模块之re正则表达式详解
    一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码...
    99+
    2022-06-04
    详解 模块 正则表达式
  • Python中的re正则表达式模块
    一、re模块的基本使用 Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符。正则表达式是用来匹配处理字符串的。 假如你需要匹配文本中的字符\,Python里的使用原生字符串...
    99+
    2024-04-02
  • 详细解析python正则表达式re模块
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于正则表达式中re模块的相关问题,下面一起来看一下,希望对大家有帮助。在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。...
    99+
    2022-06-14
    python
  • python的正则表达式和re模块详解
    目录一、正则表达式基础二、python re模块三、进阶总结一、正则表达式基础 二、python re模块 注意:正则表达式 != re eg: 注意:如果返回的是对象,则需要...
    99+
    2024-04-02
  • 关于Python正则表达式模块之re模块
    目录前言:导入模块1.re.match() 函数(1)匹配单个字符(2)匹配多个字符 字符功能/说明位置*(3) 匹配开头和结尾2.re.search() 函数3.re.findal...
    99+
    2023-05-16
    Python正则表达式 Pythonre模块
  • Python的re模块正则表达式操作
    这个模块提供了与 Perl 相似l的正则表达式匹配操作。Unicode字符串也同样适用。 正则表达式使用反斜杠" "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \...
    99+
    2022-06-04
    模块 操作 正则表达式
  • python正则表达式(re模块)的使用详解
    目录前言re.match函数匹配单个字符匹配多个字符匹配开头结尾匹配分组re.compile 函数re.search函数re.findall函数re.finditer函数re.sub...
    99+
    2024-04-02
  • 如何分析Python正则表达式re模块
    本篇文章为大家展示了如何分析Python正则表达式re模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。简介正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表...
    99+
    2023-06-17
  • python正则表达式re模块怎么使用
    这篇文章主要介绍“python正则表达式re模块怎么使用”,在日常操作中,相信很多人在python正则表达式re模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python正则表达式re模块怎么使用...
    99+
    2023-07-02
  • Python正则表达式re模块详解(建议收藏!)
    目录前言match匹配字符串单字符匹配. 匹配任意一个字符\d 匹配数字\D 匹配非数字\S 匹配非空白\w 匹配单词、字符,如大小写字母,数字,_ 下划线\W 匹配非单词字符[ ]...
    99+
    2024-04-02
  • Python基础教程之正则表达式基本语法以及re模块
    什么是正则: 正则表达式是可以匹配文本片段的模式。 正则表达式'Python'可以匹配'python' 正则是个很牛逼的东西,python中当然也不会缺少。 所以今天的Python就跟大家一起讨论一下...
    99+
    2022-06-04
    语法 基础教程 模块
  • Python案例|Pandas正则表达式
    字符串的处理在数据清洗中占比很大。也就是说,很多不规则的数据处理都是在对字符串进行处理。Excel提供了拆分、提取、查找和替换等对字符串处理的技术。在Pandas中同样提供了这些功能,并且在Pandas中还有正则表达式技术的加持,让其字符...
    99+
    2023-09-02
    python 开发语言 正则表达式 数据清洗 Pandas 原力计划
  • Python正则表达re模块之findall()函数详解
    一、re.findall函数介绍 它在re.py中有定义: def findall(pattern, string, flags=0): """Return a list o...
    99+
    2024-04-02
  • 怎么理解并掌握python正则表达式和re模块
    这篇文章主要介绍“怎么理解并掌握python正则表达式和re模块”,在日常操作中,相信很多人在怎么理解并掌握python正则表达式和re模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解并掌握pyth...
    99+
    2023-06-01
  • Python正则表达式以及常用匹配实例
    目录1 正则表达式对象2 正则表达式修饰符 - 可选标志3 正则表达式字符意义re.match函数re.search方法替换re.subre.compile 函数findallre....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作