Python 正则表达式RE 模块

愿你我江湖永别后会无期,道别的话多说无益,祝你无边落木萧萧下,西出阳关无故人,雨淋白骨血染草,月冷黄沙鬼守尸。

正则表达式这个知识点很大,本文仅仅做一些自己在学习正则的时候常用语法的总结。

匹配次数

.         匹配任意字符一次
*         匹配前面的表达式0/n次
+         匹配前面的表达式1/n次
?        匹配前面的表达式0/1次
{m}        匹配前面的表达式m次
{m,n}     匹配前面的表达式m到n次
*?       匹配前面的表达式0次
+?       匹配前面的表达式1次

常用语法

re.S    匹配所有的字符
re.I    匹配大小写
re.M    多行匹配
re.match从头开始匹配
re.search全文匹配
\d         匹配所有的数字
\D        匹配所有的非数字
\s        匹配所有的文字
\S        匹配所有的非文本
[]        字符集合,匹配里面的所有表达式,使用|分开

常用功能

创建正则表达式对象

compile(pattern[, flags])    
#根据包含正则表达式的字符串创建模式对象    

全文查找符合表达式的对象

search(pattern, string[, flags])    
#在字符串中查找,只查找一个

从头开始查找符合表达式的对象

match(pattern, string[, flags])    
#在字符串的开始处匹配模式

分割字符串

split(pattern, string[, maxsplit=0,flags])    
#根据模式的匹配项来分割字符串

寻找所有符合表达式的对象

findall(pattern, string,flags)    
#列出字符串中模式的所有匹配项

返回的对象是一个列表的格式

替换字符串

sub(pat,repl, string[,count=0,flags])    
#将字符串中所有的pat的匹配项用repl替换

注意$表示字符串的结尾,所以加上$表示匹配的内容必须在字符串的结尾
匹配整个字符串还要加上字符串开始标记^

注意写爬出的时候可以用正则表达式匹配多个对象,然后遍历的时候使用yield生成器,可以组合成字典的形式,然后把字典给json.dumps()转换成json的格式,最后保存在本地文本中。

超级万金油表达式

个人最喜欢的搜索数据的方式,非常的方便和简单上手,直接上案例:

数据:

strings = 'AAAAb浪子好帅啊我的天dAAAA真的吗???PPPP确实....'

需要的数据为:

浪子好帅啊我的天

查看需要数据的旁边的字符串为:

AAAAb
和
dAAAA

就很简单的使用超级万金油表达式寻找数据了

r = re.search('AAAAb(.*?)dAAAA',strings)
print(r.group(1))

就能找到需要的数据了

常规匹配的正则语法

  1. 汉字:[\u4e00-\u9fa5]{0,}
  2. 英文和数字:[A-Za-z0-9]+
  3. 长度为3-20的所有字符:.{3,20}
  4. Email地址:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
  5. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  6. InternetURL:[a-zA-z]+://[^\s] 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
  7. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  8. 国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}(0511-4405222、021-87888822)
  9. 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  10. 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  11. 腾讯QQ号:[1-9][0-9]{4,}
  12. IP地址提取:\d+.\d+.\d+.\d+
坚持原创技术分享,您的支持将鼓励我继续创作!

-------------本文结束感谢您的阅读-------------

腾讯云主机优惠打折:最新活动地址


版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%