正则表达式在字符串匹配中起到巨大的作用。

简介

几个数据提取工具对比:

  • re(正则表达式):速度很快,难度高(语法难记),不需要安装(python标准库内置)
  • bs(BeautifulSoup):速度慢,使用简单(find等语法),安装简单(pip)
  • lxml:速度比较快,使用简单(内置xpath),安装一般(pip)

这里可以看到虽然正则表达式上手比较难,但是它几乎是最通用速度最快最灵活的字符串分析工具。

本文只是介绍如何在Python中使用正则表达式,如何去写正则表达式的式子不是一篇博客说得清的。

语法

  • .表示任意一个字符除了\n
  • []匹配中括号中任意字符
  • \d任意一个数字
  • \D除了数字
  • \s空格,tab键
  • \S除了空白
  • \w单词字符A-Z,a-z,0-9,_
  • \W除了
  • *表示前面内容重复零次或者多次
  • +表示前面内容至少出现一次
  • ?前面才出现的内容零次或者一次
  • {m,n}允许前面的内容最少m次,最多n次
  • ^匹配字符串的开始
  • $匹配字符串的结尾
  • \b匹配单词的边界
  • ()对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大

使用

1. 首先如何任何正则表达式使用的基础都是编译正则表达式的表达式生成正则表达式对象。

下面代码表示字符串中找到数字串

import re
p = re.compile(r'\d+')
print(type(p))

2. match(str,a,b)匹配字符串中符合条件的结果,a表示起始位置下标,b表示结束位置下标,只会在a,b之间查找

注意:match的结果是一个match对象,且得到的是第一个查找到的值。

import re
p = re.compile(r'\d+')
m = p.match("123nzcisbnkld45jh78")
print(type(m))
print(m)
<class '_sre.SRE_Match'>
<_sre.SRE_Match object; span=(0, 3), match='123'>

下面是match对象的一些常用方法。

import re
p = re.compile(r'\d+')
m = p.match("123nzcisbnkld45kl67")
# 匹配到的match对象的文本值
print(m[0])
# 匹配到的match对象在源字符串中的下标起始位置
print(m.start(0))
# 匹配到的match对象在源字符串中的下标结束位置
print(m.end(0))
123
0
3

注意:search方法和match类似,返回一个match对象。

3. findall(str,a,b)参数含义和match完全一致

import re
p = re.compile(r'\d+')
rst = p.findall("one12two34three567")
print(rst)
['12', '34', '567']

可以看到返回的是一个匹配到的所有结果字符串组成的列表。个人觉得这种方法会比较常用,例如使用爬虫时下面的配合replace等处理使用(下面代码包含html中查询指定标签的写法)。

import re
html = '''
<td class="ip"><span style='display: inline-block;'>13</span><div style='display: inline-block;'></div><p style='display: none;'>8</p><span>8</span><p style='display:none;'>.2</p><span>.2</span><p style='display: none;'>0</p><span>0</span><span style='display: inline-block;'>1.</span><p style='display:none;'>10</p><span>10</span><span style='display:inline-block;'>1.</span><div style='display:inline-block;'>33</div>:<span class="port DFEE">8173</span></td>
'''
# 匹配p标签的一种写法,其他标签可以类似修改
p =re.compile(r'<p.*?>[^<]*?</p>')
lll = p.findall(html)
print(lll)
for item in lll:print(item)html.replace(item, "")
["<p style='display: none;'>8</p>", "<p style='display:none;'>.2</p>", "<p style='display: none;'>0</p>", "<p style='display:none;'>10</p>"]
<p style='display: none;'>8</p>
<p style='display:none;'>.2</p>
<p style='display: none;'>0</p>
<p style='display:none;'>10</p>

更多操作可以查看Python官方参考文档。

Python高级语法-正则表达式相关推荐

  1. Python高级语法系列

    Python高级语法(1)-抽象类 Python高级语法(2)-多继承和MRO继承机制 Python高级语法(3)-global和nolocal关键字使用详解 Python高级语法(4)-魔法函数__ ...

  2. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  3. Python面试题大全(二):python高级语法

    目录 Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 43.遍历一个object的所有属性,并print每一个属性名? 44.写一个类,并让它尽可能多的支持操作符? ...

  4. Python学习之旅三:python高级语法

    使用pycharm和jupter notebook. 1 包 1.1 模块 一个模块就是一个包含python代码的文件,后缀名为.py即可,模块就是个python文件. 1.1.1 为什么要使用模块呢 ...

  5. Python程序设计与科学计算精录总结Episode.3 Python高级语法:文件、异常、标准库和问题解决模式知识总结(基于Michael导师Python课程与VS2019)

    今天是2020年5月20日,这个对于博主来说平凡的一天,但社交媒体上早就炸开锅了. 博主认为,有些人受过伤之后,就爱的小心翼翼,迟迟不敢去再次追求自己的另一半,就这样,渐渐的过了能够大胆去爱的年纪,一 ...

  6. Python高级语法-详解set机制

    集合过滤机制 文章目录 集合过滤机制 简介 Set详解 Set使用 补充说明 简介 底层分析set的实现原理. 详细分析Python的set容器如何过滤自定义类. 代码实现多熟悉自定义类的按照指定属性 ...

  7. python高级语法-高阶函数之map的使用方法

    python标准库内置了不少常用的高阶函数. 这里简单介绍一下比较实用的几个的用法. 首先,什么叫高阶函数? 高阶函数,把函数作为参数的函数,这是源于python中函数可以像变量一样赋值等操作,这是其 ...

  8. python高级语法-GUI编程(主要介绍tkinter)

    首先,这里必须强调,尽管python的创始人提到过python没有主打领域,后来者可以无限丰富它,但是时至今日, python语言已经找到了自己的路,但这些路里面绝对没有GUI开发.所以这里只做粗浅的 ...

  9. python高级语法 - 文件读写操作及其持久化

    文件 长久保存信息的一种数据信息集合(持久化) 常用操作 打开关闭(文件一旦打开,需要关闭操作) 读写内容 查找 open 函数 open函数负责打开文件,带有很多参数 第一个参数:必须有,文件的路径 ...

最新文章

  1. 认真推荐8个功能强大的实用网站,备受好评!
  2. pcss评分_GTA5画质设置 N卡画质选项设置指南
  3. numpy a[...,:2]
  4. 蓝桥杯练习系统习题-历年真题解析1(完整版)
  5. 重新ICP,在没有Matlab的日子里
  6. spring中aop事务
  7. IOS NSUserDefaults 讲解 用法
  8. 如何安装python3.6_python3.6环境下如何安装freetype库和基本使用方法
  9. uni —app 录音_uniapp如何实现录音功能
  10. 小白如何打造一个基础的留言板网站(一)
  11. 奔驰首秀L4自动驾驶:100万最贵电动车展示最豪华「AI代客泊车」
  12. 修改rpg maker mv的几种上限2020-05-25
  13. 四阶龙格库塔方程(Rungekutta)解二阶常微分方程组并计算船舶在迎浪下的纵摇埀荡耦合运动方程-附Matlab代码
  14. Games101 学习笔记
  15. 计算机网络终端接口知识,计算机网络实用技术知识点之ISDN接口及配置
  16. 因子分析做bartletts球状验证和KMO验证时,数据报‘float‘ object has no attribute ‘shape‘错误
  17. 产品经理面试攻略------简历篇
  18. IA-PEG2k-MAL,Iodoacetyl-PEG2k-MAL避光避湿保存,取用时注意干燥
  19. 【听译大师说话】python 创始人访谈录 1: 关于 django 和 ruby
  20. 为什么仓库软件不能直接修改库存数量

热门文章

  1. 注册注解BeanDefinition
  2. Spring5的系统架构
  3. 代理模式在Spring 源码中的应用
  4. 类加载的双亲委派机制
  5. shiro认证与授权:自定义realm
  6. 数据库-优化-数据库结构的优化-表范式化优化
  7. Request_获取请求参数中文乱码问题处理
  8. 多值参数-元组和字典的拆包
  9. 拼接字符串的两种方式
  10. pytorch教程龙曲良01-05