Python爬虫教程三:数据清洗-正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

python 中封装了re模块。

常用方法

re.match()

尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
print(result)
print(result.group())   # 获取匹配的结果
print(result.span())    # 获取匹配字符串的长度范围
Python爬虫教程三:数据清洗-正则表达式

re.search()

re.search 扫描整个字符串并返回第一个成功的匹配。

import re

content = "extra things hello 123455 world_this is a Re Extra things"

result = re.search("hello.*?(\d+).*?Re",content)
print(result)
print(result.group())
print(result.group(1))
Python爬虫教程三:数据清洗-正则表达式

re.findall()

搜索字符串,以列表的形式返回全部能匹配的子串

re.finditer()

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

re.sub()

用于替换字符串中的匹配项。

re.compile()

用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

re.split()

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

修饰符 – 可选标志

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

正则表达式模式

模式描述
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,’m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0个或多个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}匹配n个前面表达式。例如,”o{2}”不能匹配”Bob”中的”o”,但是能匹配”food”中的两个o。
re{ n,}精确匹配n个前面表达式。例如,”o{2,}”不能匹配”Bob”中的”o”,但能匹配”foooood”中的所有o。”o{1,}”等价于”o+”。”o{0,}”则等价于”o*”。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b匹配a或b
(re)匹配括号内的表达式,也表示一个组
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re)类似 (…), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#…)注释.
(?= re)前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。
(?> re)匹配的独立模式,省去回溯。
\w匹配数字字母下划线
\W匹配非数字字母下划线
\s匹配任意空白字符,等价于 [\t\n\r\f]。
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]。
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z匹配字符串结束
\G匹配最后匹配完成的位置。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n, \t, 等。匹配一个换行符。匹配一个制表符, 等
\1…\9匹配第n个分组的内容。
\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

原创文章,作者:三酷猫,如若转载,请注明出处:https://www.sankumao.com/3719.html

(0)
上一篇 2022年10月12日 下午10:23
下一篇 2022年10月13日 下午5:46

相关推荐

  • Python爬虫教程六:多线程爬虫案例实例

    一、python多线程 关于多线程的知识,看下面这篇文章即可。 二、多线程实例 这里我们是把本站python爬虫教程四中的爬虫例子,给改编写成使用多线程的模式的。 原代码效果如下:…

    2022年10月14日
  • 两种办法,快速一键生成Python爬虫请求头!

    我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),这里介绍工具一键生成请求头,省去编写请求头信息的麻烦! 方法一:网站在线转换 工具网址:https:…

    2022年11月3日
  • python多线程超级详细!

    一、什么是多线程? 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,比如用户点击了一个按钮…

    2022年10月14日
  • python中继承详解super().__init__()

    super().__init__(),就是继承父类的init方法,同样可以使用super()点 其他方法名,去继承其他方法。 我们这里通过实例来了解如何在子类中使用父类方法的方式。…

    2022年10月24日
  • 60个必备!用Python的一些日常高频写法,建议收藏备用!

    一、 数字 1 求绝对值 绝对值或复数的模 2 进制转化 十进制转换为二进制: 十进制转换为八进制: 十进制转换为十六进制: 3 整数和ASCII互转 十进制整数对应的ASCII字…

    Python 2022年10月24日
  • 10个有趣的 Python 高级脚本,建议收藏!

    在日常的工作中,我们总会面临到各式各样的问题。 其中不少的问题,使用一些简单的Python代码就能解决。 比如不久前的复旦大佬,用130行Python代码硬核搞定核酸统计,大大提升…

    2022年4月23日
  • 4 个 Python 推导式开发技巧

    什么是列表推导式? 列表推导式List Comprehension是创建列表的一种优雅且最符合python语言的方法。与for循环和if语句相比,列表推导式在基于现有列表的值创建新…

    2022年11月5日
  • 基于scrapy的redis安装和配置方法

    在定向爬虫的制作过程中,使用分布式爬取技术可以显著提高爬取效率。而 Redis 配合 Scrapy 是实现分布式爬取的基础。 Redis 是一个高性能的 Key-Value 数据库…

    2022年11月13日
  • selenium-python-Helium库介绍,更轻量的自动化测试框架!

    对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途。Seleniu…

    2022年11月12日
  • Python复制文件的5种方法

    以下是“如何在Python中复制文件”的4种库的使用。+open方法来复制文件 一、shutil标准库 具体使用方法,请查看如下shutil库介绍教程。 二、os库 1.os.po…

    2022年11月16日