python演示解答正则为什么是最强文本处理工具
正则表达式,又称规则表达式。(英语: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)
.
*
增加替代
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
保留获取
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,m}
+
*
== 难度加大,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
(?: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
re.U或re.UNICODE
re.U或re.UNICODE
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 正则内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!
【来源:http://www.1234xp.com/hwgf.html 转载请保留连接】