位置: 编程技术 - 正文

Python 正则表达式入门(中级篇)

编辑:rootadmin

推荐整理分享Python 正则表达式入门(中级篇),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

初级篇链接: d+.&#;d+.&#;d+.&#;d+

不好,一个是太繁琐,另一个是连位数都控制不了

答案二 d+{1,3}.&#;d+{1,3}.&#;d+{1,3}.&#;d+{1,3}

一般般,复杂但是起码能把位数控制在合理范围

答案三 (d+{1,3}.){3}d+{1,3}.

利用子表达式,将.这种数字加小数点看做一个整体字符,对其规定重复匹配的次数,既简洁,效果又好。所以只要你将几个字符组合用圆括号括起来,那么你就可以把一个圆括号内的内容当做一个字符,外面可以加我们之前讲过的所有元字符来控制匹配。

2.向前向后查找

现在,我们终于来到了向前向后查找这一块。为什么说终于来到这了呢?还记得我们在初级篇最开始的例子吗?

假如你在写一个爬虫,你得到了一个网页的HTML源码。其中有一段html

<html><body><h1>hello world</h1></body></html>

你想要把这个hello world提取出来

这个正则表达式

p1 = r"(&#;<=<h1>).+&#;(&#;=<h1>)"

看到(&#;<=<h1>) 和 (&#;=<h1>)了吗?第一个&#;<=表示在被匹配字符前必须得有<h1>,后面的&#;=表示被匹配字符后必须有<h1>

简单来说,就是你要匹配的字符是XX,但必须满足形式是AXXB这样的字符串,那么你就可以这样写正则表达式

Python 正则表达式入门(中级篇)

p = r"(&#;<=A)XX(&#;=B)"

匹配到的字符串就是XX。并且,向前查找向后查找不需要必须同时出现。如果你愿意,可以只写满足一个条件。

所以你也不需要记住哪个是向前查找,哪个是向后查找。只要记住&#;<=后面跟着的是前缀要求,&#;=后面跟的是后缀要求。

本质上来说,向前查找和向后查找其实是匹配整个字符串,即AXXB,但返回时仅仅返回一个XX。也就是说,如果你愿意,完全可以避开向前向后查找的方式,直接匹配带有前后缀的字符串,然后做字符串切片处理。

3.回溯引用

不同于前面的向前向后查找,这一条有时候你未必绕的过去。在有些情况下,你还必须得用到回溯引用,所以你如果想拥有在实际应用中使用正则表达式,回溯引用是你应该了解和掌握的。

我们还是从最开始的例子来说。

你原本要匹配<h1></h1>之间的内容,现在你知道HTML有多级标题,你想把每一级的标题内容都提取出来。你也许会这样写:

p = r"<h[1-6]>.*&#;</h[1-6]>"

这样一来,你就可以将HTML页面内所有的标题内容全部匹配出来。即<h1></h1>到<h6></h6>的内容都可以被提取出来。但是我们之前说过,写正则表达式困难的不是匹配到想要的内容,而是尽可能的不匹配到不想要的内容。在这个例子中,很有可能你就会被下面这样的用例玩坏。

比方说

<h1>hello world</h3>

发现后面的</h3>了吗?我们不管是怎么写出来这样的标题的,但实实在在的是我们的正则表达式同样会把这里面的hello world匹配出来。这时候就是回溯引用的重要作用。下面就是一个示例:

结尾就能看出效果

看到1了吗?原本那个位置应该是[1-6],但是我们写的是1,我们之前说过,转义符干的活就是把特殊的字符转成一般的字符,把一般的字符转成特殊字符。普普通通的数字1被转移成什么了呢?在这里1表示第一个子表达式,也就是说,它是动态的,是随着前面第一个子表达式的匹配到的东西而变化的。比方说前面的子表达式内是[1-6],在实际字符串中找到了1,那么后面的1就是1,如果前面的子表达式在实际字符串中找到了2,那么后面的1就是2。

类似的,2,3,....就代表第二个第三个子表达式。

所以回溯引用是正则表达式内的一个“动态”的正则表达式,让你根据实际的情况变化进行匹配。

中级篇就到这里,其实正则表达式还有很多细节还没有写出来,也有很多元字符我没有交代,但掌握了纲要,懂得原理之后剩下的就类似于查表构造这种活了。

建议看到这的朋友看看《正则表达式必知必会》,初级篇和这篇中有几个例子也是取材于此。

标签: Python 正则表达式入门(中级篇)

本文链接地址:https://www.jiuchutong.com/biancheng/382422.html 转载请保留说明!

上一篇:Python 正则表达式入门(初级篇)

下一篇:详解使用python crontab设置linux定时任务(python crc)

  • 赠送给客户的库存商品怎么做账
  • 法人能去税务局买票吗
  • 原材料报废可以退税吗
  • 证券交易印花税税率是多少
  • 个人开不动产租赁发票税率
  • 合伙企业法人股东
  • 带薪年假是入职就有还是要等一年以后
  • 公司职工餐费用怎样入账
  • 税务现金流量表怎么填
  • 资产减值确定计量原则包括哪些
  • 处置车辆收入缴税规定
  • 通行费抵扣入账会计分录?
  • 企业退休返聘人员工资是否缴纳单位社保
  • 企业基本保险
  • 非经营性费用包括哪些内容
  • 收到违约金需要缴纳所得税吗
  • 营改增之后账务怎么处理
  • 目前建筑里面税金总共包括几部分
  • 一般纳税人可以开1%的发票吗
  • 建房子的公司
  • 纳税申报方式怎么修改
  • 收到快递关税做什么科目
  • 施工企业劳务
  • 计提房租费
  • 王者荣耀中马可波罗的一技能和大招
  • 商会收到的会费要交企业所得税
  • 发票开了对方未付款
  • vcpkgsrv.exe是什么进程
  • 资本公积转增资本要交税吗
  • php数组函数 菜鸟
  • 购买股票的会计分录
  • 商业企业会计科目表
  • 冰上的卷羽鹈鹕,希腊凯尔基尼湖 (© Guy Edwardes/Minden Pictures)
  • 企业所得税季度申报数据怎么来
  • 买入返售金融资产和卖出回购金融资产
  • php curl cookie
  • 财务报销单据不能用圆珠笔写吗
  • 餐饮手撕票在哪里买多少钱
  • 计提企业所得税是在结转损益后吗
  • google map
  • css教程网站
  • 什么是行政单位任命的事业单位工作人员
  • 劳务公司需要缴纳社保吗
  • dedecms转eyoucms
  • sql2000数据迁移到2008
  • 人力资源行业税收优惠
  • 机票的退票费可以开具发票吗
  • 会计 借方 贷方
  • 小规模企业房产税减按50%
  • 以股权投资入股新公司税务处理
  • 对公支付的款项没有发票怎么报销
  • 非货币性资产交换和债务重组的区别
  • 取得异常凭证企业所得税调整
  • 什么发票可以抵扣税
  • 出口货物开票怎么处理
  • sql语句的子查询
  • linux下mysql5.7.19(tar.gz)安装图文教程
  • Mac系统怎么设置ftp
  • ubuntu20.04最小化安装教程
  • 64位win10预览版10565更新补丁KB3105208后蓝屏怎么办?
  • Linux下使用quota命令管理磁盘空间的实例教程
  • windows8开机慢怎么办
  • Win7 64位操作系统怎么使用DVD刻录光驱复制软件
  • LINUX下的磁盘编辑工具
  • Win10年度更新将统一Insider与Xbox One预览体验
  • excel嵌入图片变成代码怎么办
  • linux命令有啥用
  • 网页设计中的几种齐方式及其特点
  • android iframe
  • shell错误日志输出
  • shell脚本计算字符串长度
  • jquery数据绑定
  • 金税盘注销后怎么开发票
  • 欧美 房产税
  • 电子税务局跨区域
  • 税务局查帐流程
  • 别人用你的收款码能骗到钱吗
  • 内蒙古国家税务局网上电子税务局官网
  • 上海公积金快速提取
  • 如何查询企业上市情况
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设