python演示解答正则为什么是最强文本处理工具

 更新时间:2021年09月16日 16:44:08   作者:派森攻城狮  
正则表达式又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本,它是最强的文本处理工具,至于原因本文将给你答案

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

Python作为一门数据处理语言,经常使用正则匹配段落,比如爬虫爬取数据时。正则表达式是Python内置的模块,不需要额外安装。

在这里插入图片描述

今天来给大家分享一份比较全面的Python正则表达式宝典,学会之后,你将掌握正则表达式的各种应用场景。

re模块

re (Regular Expression简写),这个很好记住。

1.导入re模块

在使用正则表达式之前,需要导入re模块。

import re

2.findall()的语法:

导入了re模块之后就可以使用findall()方法了,
re.findall(pattern, string, flags=0)

参数

pattern:必填。正则表达式
string:必填,需要检索的文本, == 确保没乱码 ==
Flags:选填,功能标志位

返回数组

str='a1a2a3'
newStr=re.findall('a\d',str )
nullVlue=re.findall('b\d',str)
print('newStr匹配个数:',len(newStr))
print('newStr匹配结果',newStr)
print('nullVlue匹配个数:',len(nullVlue))
print('nullVlue匹配结果',nullVlue)

显示如下:

newStr匹配个数: 3
newStr匹配结果 ['a1', 'a2', 'a3']
nullVlue匹配个数: 0
nullVlue匹配结果 []

基本语法已经介绍完成了。

正则表达式

1.傻瓜式截取findall

import re

text='aaa bbb ccc'

rol='aaa (.*) ccc'

rul=re.findall(rol ,text)

print(rul)

显示如下:

['bbb']

直接复制原来的文本,把想要提取的文本替换成(.*)

在这里插入图片描述

表达式解释:

表示 意义
(pattern) 表示匹配pattern并获取这一匹配。要匹配圆括号字符,请使用""。
. 匹配除“\n"之外的任何单个字符。要匹配包括"\n"在内的任何字符,请使用像"(.|\n)"的模式。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等价于{0,}。

增加替代

import re

text = '<li><a href="/2/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >动作片</a></li> <li><a href="/1/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >喜剧片</a></li>'

rol = r'<li><a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >(.*?)</a></li>'

rul = re.findall(rol, text)

print(rul)

显示:

['动作片', '喜剧片']

表达式解释:

在这里插入图片描述

表示 意义
? 非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
pattern 不带( )表示匹配pattern匹配值不获取~~获取值不输出~~。

保留获取

import re

text = '<li><a href="/2/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >动作片</a></li> <li><a href="/1/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >喜剧片</a></li>'

role = r'<li><a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >(.*?)</a></li>'

resu = re.findall(role , text)

rol2=r'(<a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >.*?</a>)'

rul2 = re.findall(rol2, text)

print(resu )

显示:

['<a href="/2/">动作片</a>', '<a href="/1/">喜剧片</a>']

把括号写在外面就可以了

傻瓜式的讲完了,下面讲讲限定符

1 - [xyz]

字符集合。匹配所包含的任意一个字符。例如,“[abc]“可以匹配"plain"中的"a”。

import re

text = 'aab 1+23 ss aac 4-56 ss'

rol = r'aa(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'aa[bc](.*?)ss'

rul1 = re.findall(rol2, text)

print(rul1)


输出:

['b 1+23 ', 'c 4-56 ']
[' 1+23 ', ' 4-56 ']

== 表达式解释 ==
①我们可以先把固定的截取下来,红框部分。
②再通过非截取方式把b和c过滤掉,蓝色部分。
③[ ]提供的就是包含功能

在这里插入图片描述

2 - {}

表示 意义
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}"将匹配"fooooood"中的前三个o。"o{0,1}"等价于"o?"。请注意在逗号和两个数之间不能有空格。
+ 匹配前面的子表达式一次或多次。例如,“zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}。。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等价于{0,}。

== 难度加大,b和c的个数不固定 ==

import re
#难度加大,b和c的个数不固定
text = 'aabbccbb 1+23 ss aaccb 4-56 ss'

rol = r'aa[bc]{3,10}(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'aa[bc](.*?)ss'

rul2 = re.findall(rol2, text)

print(rul2)


显示:

[' 1+23 ', ' 4-56 ']
['bccbb 1+23 ', 'cb 4-56 ']

在这里插入图片描述

3 - (?:pattern)正则断言

断言(Assertions)在正则表达式概念里面难理解,它通常指的是在目标字符串的当前匹配位置进行的一种测试但这种测试并不占用目标字符串,也即不会移动模式在目标字符串中的当前匹配位置。

表示 意义
x|y 匹配x或y。例如,“z|food"能匹配"z"或"food"。"(z|f)ood"则匹配"zood"或"food"。
(?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)"来组合一个模式的各个部分是很有用。
(?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?<=pattern) 反向肯定预查,与正向肯定预查类拟,只是方向相反。
(?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。

== 再把开头字符变得不固定aa和dd,结尾字符ss,ff ==

import re
#难度加大,b和c的个数不固定
#再把开头字符变得不固定aa和dd,结尾字符ss,ff
text = 'aabbccbb 1+23 ss ddccb 4-56 ff'

rol = r'aa[bc]{3,10}(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul2 = re.findall(rol2, text)

print(rul2)

显示:

[' 1+23 ']
[' 1+23 ', ' 4-56 ']

在这里插入图片描述

Python正则flags

编译标志让你可以修改正则表达式的一些运行方式。多个标志可以通过按位 OR-ing 它们来指定。如 re.I | re.M 。flags都有两种形式,缩写和全写都可以。

表示 意义
re.I或re.IGNORECASE 忽略大小写
re.L或re.LOCALE 使用当地locale。(python中有个locale模块,locale代表不同的语言,地区和字符集)
re.U或re.UNICODE 使用unicode的locale
re.U或re.UNICODE 使用unicode的locale
re.M或re.MULTILINE 使用^或$时会匹配每一行的行首或行尾
re.S或re.DOTALL 使用.时能匹配换行符
re.X或re.VERBOX 忽略空白字符,而且可以加入注释

re.I

import re
#难度加大,b和c的个数不固定
#再把开头字符变得不固定aa和dd,结尾字符ss,ff
#改变字母大小写
text = 'aAbBCcbb 1+23 Ss Ddccb 4-56 fF'

rol = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul = re.findall(rol, text)
print(rul)

rul2 = re.findall(rol, text,re.I)
print(rul2)



显示:

[]
[' 1+23 ', ' 4-56 ']

在这里插入图片描述

re.M和re.S

import re
#难度加大,b和c的个数不固定
#再把开头字符变得不固定aa和dd,结尾字符ss,ff
#改变字母大小写
#在中间添加一个换行符
text = 'aAbBCcbb 1+23 \n Ss Ddccb 4-56 fF'

rol = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul = re.findall(rol, text,re.I)
print(rul)

rul2 = re.findall(rol, text,re.I|re.S)
print(rul2)

显示:

[' 4-56 ']
[' 1+23 \n ', ' 4-56 ']

在这里插入图片描述

== 结果说明 ==
①默认re.M只会匹配在当前 行(非列) 里面进行匹配,“Ss”已经换行了,所以“1+23”没有匹配到。
②re.S表示匹配多行,并且捕获换行符
③re.S|re.I可以并行使用

# 结语 正则的匹配方法,已经写完了,号称万能的文本处理工具,下篇开始讲解,替换,追加。最后最后,感谢大家关注!

到此这篇关于python演示解答正则为什么是最强文本处理工具的文章就介绍到这了,更多相关python 正则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django基于restframework的CBV封装详解

    django基于restframework的CBV封装详解

    这篇文章主要介绍了django基于restframework的CBV封装详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • pythotn条件分支与循环详解(2)

    pythotn条件分支与循环详解(2)

    这篇文章主要介绍了Python条件分支和循环用法,结合实例形式较为详细的分析了Python逻辑运算操作符,条件分支语句,循环语句等功能与基本用法,需要的朋友可以参考下
    2021-08-08
  • Opencv常见图像格式Data Type及代码实例

    Opencv常见图像格式Data Type及代码实例

    这篇文章主要介绍了Opencv常见图像格式Data Type及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python通过wxPython打开一个音频文件并播放的方法

    python通过wxPython打开一个音频文件并播放的方法

    这篇文章主要介绍了python通过wxPython打开一个音频文件并播放的方法,实例分析了wxPython操作音频文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python实现一个转存纯真IP数据库的脚本分享

    Python实现一个转存纯真IP数据库的脚本分享

    工作中我们常需要使用纯真IP数据库内的数据做分析,下面这篇文章主要给大家介绍了利用Python如何实现一个转存纯真IP数据库的相关资料,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Python基础教程之输入输出和运算符

    Python基础教程之输入输出和运算符

    这篇文章主要给大家介绍了关于Python基础教程之输入输出和运算符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • Apache DophinScheduler定时调度Python脚本的实现

    Apache DophinScheduler定时调度Python脚本的实现

    本文主要介绍了Apache DophinScheduler定时调度Python脚本的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python FTP文件定时自动下载实现过程解析

    Python FTP文件定时自动下载实现过程解析

    这篇文章主要介绍了Python FTP文件定时自动下载实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python超细致探究面向对象

    Python超细致探究面向对象

    面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和 “对象”来实现,所以,面向对象编程其实就是对 “类”和“对象” 的使用,今天给大家介绍下python 面向对象开发及基本特征,感兴趣的朋友一起看看吧
    2022-06-06
  • 如何在django里上传csv文件并进行入库处理的方法

    如何在django里上传csv文件并进行入库处理的方法

    这篇文章主要介绍了如何在django里上传csv文件并进行入库处理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论