正则表达式及其在python上的应用

今天学习了一早上正则表达式。如下内容部分转载自《读懂正则表达式就这么简单》

一、什么是正则表达式

正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

1.2 常用的正则匹配工具

在线匹配工具:
1. http://www.regexpal.com/
2. http://rubular.com/
3. http://tools.jb51.net/regex/create_reg
4. txt2re :这个在线网站支持解析一句话,从中可以生成匹配的正则表达式,且可以生成诸多类型的代码。语言支持:Perl PHP Python Java Javascript ColdFusion C C++ Ruby VB VBScript J#.net C#.net C++.net VB.net

正则匹配软件

McTracer

用过几个之后还是觉得这个是最好用的,支持将正则导成对应的语言如java C# js等还帮你转义了,Copy直接用就行了很方便,另外支持把正则表达式用法解释,如哪一段是捕获分组,哪段是贪婪匹配等等,总之用起来 So Happy .

二 正则字符简单介绍

关于这部分建议跳到: 《读懂正则表达式就这么简单》
里面有很详细的介绍。

另外关于python的正则表达式,主要使用re模块。

我们以任务为导向介绍python正则表达式的用法。
假设给我们下面这段话:

I1113 23:35:50.763059  4460 solver.cpp:218] Iteration 400 (27.3075 iter/s, 0.7324s/20 iters), loss = 0.0202583
I1113 23:35:50.763141  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00101873 (* 1 = 0.00101873 loss)
I1113 23:35:50.763165  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.0192396 (* 1 = 0.0192396 loss)
I1113 23:35:50.763175  4460 sgd_solver.cpp:105] Iteration 400, lr = 0.001
I1113 23:35:51.751206  4460 solver.cpp:218] Iteration 420 (20.2456 iter/s, 0.987868s/20 iters), loss = 0.00228514
I1113 23:35:51.751341  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00140554 (* 1 = 0.00140554 loss)
I1113 23:35:51.751379  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.000879596 (* 1 = 0.000879596 loss)
I1113 23:35:51.751410  4460 sgd_solver.cpp:105] Iteration 420, lr = 0.001
I1113 23:35:52.523890  4460 solver.cpp:218] Iteration 440 (25.8933 iter/s, 0.772401s/20 iters), loss = 0.0132958
I1113 23:35:52.523974  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00312161 (* 1 = 0.00312161 loss)
I1113 23:35:52.523988  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.0101742 (* 1 = 0.0101742 loss)
I1113 23:35:52.523998  4460 sgd_solver.cpp:105] Iteration 440, lr = 0.001
I1113 23:35:53.461998  4460 solver.cpp:218] Iteration 460 (21.3325 iter/s, 0.937539s/20 iters), loss = 0.0154897
I1113 23:35:53.462057  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00780452 (* 1 = 0.00780452 loss)
I1113 23:35:53.462069  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.00768522 (* 1 = 0.00768522 loss)
I1113 23:35:53.462082  4460 sgd_solver.cpp:105] Iteration 460, lr = 0.001
I1113 23:35:54.356657  4460 solver.cpp:218] Iteration 480 (22.3584 iter/s, 0.894517s/20 iters), loss = 0.00275768
I1113 23:35:54.356729  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00107937 (* 1 = 0.00107937 loss)
I1113 23:35:54.356739  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.00167831 (* 1 = 0.00167831 loss)
I1113 23:35:54.356748  4460 sgd_solver.cpp:105] Iteration 480, lr = 0.001
I1113 23:35:55.153437  4460 solver.cpp:218] Iteration 500 (25.1734 iter/s, 0.79449s/20 iters), loss = 0.0230187
I1113 23:35:55.153519  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.0105348 (* 1 = 0.0105348 loss)
I1113 23:35:55.153530  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.0124839 (* 1 = 0.0124839 loss)
I1113 23:35:55.153542  4460 sgd_solver.cpp:105] Iteration 500, lr = 0.001
I1113 23:35:56.104395  4460 solver.cpp:218] Iteration 520 (21.0352 iter/s, 0.950785s/20 iters), loss = 0.0144106
I1113 23:35:56.104485  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00135394 (* 1 = 0.00135394 loss)
I1113 23:35:56.104504  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.0130567 (* 1 = 0.0130567 loss)
I1113 23:35:56.104521  4460 sgd_solver.cpp:105] Iteration 520, lr = 0.001
I1113 23:35:56.854631  4460 solver.cpp:218] Iteration 540 (26.6699 iter/s, 0.749909s/20 iters), loss = 0.0167331
I1113 23:35:56.854696  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00285695 (* 1 = 0.00285695 loss)
I1113 23:35:56.854710  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.0138762 (* 1 = 0.0138762 loss)
I1113 23:35:56.854720  4460 sgd_solver.cpp:105] Iteration 540, lr = 0.001
I1113 23:35:57.824692  4460 solver.cpp:218] Iteration 560 (20.6206 iter/s, 0.969902s/20 iters), loss = 0.00817935
I1113 23:35:57.824774  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.00557839 (* 1 = 0.00557839 loss)
I1113 23:35:57.824791  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.00260096 (* 1 = 0.00260096 loss)
I1113 23:35:57.824806  4460 sgd_solver.cpp:105] Iteration 560, lr = 0.001
I1113 23:35:58.670575  4460 solver.cpp:218] Iteration 580 (23.6486 iter/s, 0.845714s/20 iters), loss = 0.00420315
I1113 23:35:58.670637  4460 solver.cpp:237]     Train net output #0: rpn_cls_loss = 0.0020043 (* 1 = 0.0020043 loss)
I1113 23:35:58.670648  4460 solver.cpp:237]     Train net output #1: rpn_loss_bbox = 0.00219884 (* 1 = 0.00219884 loss)
I1113 23:35:58.670658  4460 sgd_solver.cpp:105] Iteration 580, lr = 0.001
I1114 00:34:17.348683  4460 sgd_solver.cpp:105] Iteration 79980, lr = 0.0001
speed: 0.044s / iter
Wrote snapshot to: /data1/caiyong.wang/program/py-faster-rcnn/output/faster_rcnn_alt_opt/voc_2007_trainval/zf_rpn_stage1_iter_80000.caffemodel

希望我们解析出

Iteration 500 (25.1734 iter/s, 0.79449s/20 iters), loss = 0.0230187

中的Iteration与loss值。 其实这是faster rcnn生成的log文件一部分。

我们通过上面的语法学习,在MTracer中生成了正则表达式:

\bIteration\s(?<Iteration>\d+)\s\(.*\).*loss\s=\s(?<loss>\d*\.*\d+)\b

注:.*表示除换行符以外的任意字符,*表示0个或多个
并且采用多行模式解析出了我们想要的结果。
上面的表达式中,我们使用了捕获分组。
如下图:


这里写图片描述

那么如何转化成python代码?
正确的代码如下:

import repattern = re.compile(r'\bIteration\s(?P<Iteration>\d+)\s\(.*\).*loss\s=\s(?P<loss>\d*\.*\d+)\b')
arr=pattern.search("I1113 23:35:50.763059  4460 solver.cpp:218] Iteration 400 (27.3075 iter/s, 0.7324s/20 iters), loss = 0.0202583")
arr.groups()
arr.group()
arr.group("Iteration")
arr.group("loss")

结果为:

arr.groups()
Out[147]: ('400', '0.0202583')arr.group()
Out[148]: 'Iteration 400 (27.3075 iter/s, 0.7324s/20 iters), loss = 0.0202583'arr.group("Iteration")
Out[149]: '400'arr.group("loss")
Out[150]: '0.0202583'

这里python的命名组与以往的不一样,使用的是 (?P<name>exp) 取代(?<name>exp)

而且compile里面必须加上r。


参考文献:

  • http://blog.csdn.net/lwnylslwnyls/article/details/8901273
  • https://www.cnblogs.com/tk091/p/3702307.html
  • PYTHON的RE模块理解(RE.COMPILE、RE.MATCH、RE.SEARCH)

三 python正则表达式的其他用法。

  1. 多行匹配:

python多行匹配

r = re.compile("需要的正则表达式", re.M)

匹配到需要的字符,可以获取红括号内的数字

r = re.compile("r([0-9]{5,})")

举个例子: 需要获取20462和24729连个数字

import re
data = """r24062 line1hello word !!!!r24729 line2revision:24181"""r = re.compile("^r([0-9]{5,})", re.M)nums = r.findall(data)print nums---------------------
output:["24062", "24729"]

注:{5,}表示至少重复5次
2. 无捕获分组
当你要将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时,你需要将这部分规则用

(?:)

把它包围起来。

分支条件
在正则表达式中,分支条件是一个很常用的条件。

满足条件A 或者 满足条件B ,这个时候我们就可以使用分支条件了。

分支条件使用的符号为

|

代码示例:

我们突然发现,它把字符串分割成两个部分了

I have a dog 和 cat 而不是 I have a dog 和 I have a cat

如果我们只要区分dog和cat呢?正则要怎么写?我添加一个括号试试

还是不对,前面的 “I have a ”根本没有匹配

正确的写法是应该使用无捕获分组

参考:正则表达式-python-无捕获分组与分支选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全专家在硬盘固件中发现NSA的网络间谍程序

本周安全专家在硬盘固件中发现了美国国家安全局&#xff08;NSA&#xff09;的网络间谍程序&#xff0c;这些程序非常难以被检测或者删除。来自卡巴斯基的研究者公布了该恶意程序用来“Phone Home”的URL地址&#xff0c;NSA利用这些随机、凌乱的地址来收集硬盘上的敏感数据。 …

SVN 分支/合并/切换

本文无条理性&#xff0c;仅作自我参考。 花费了两个半下午&#xff0c;走马观花的看了一下说明文档&#xff0c;SVN设计的太复杂&#xff0c;对我这样的&#xff0c;不在一个集体的的业余开发者&#xff0c;要理解起来真是太难了。。。。 分支 Make branches as often as yo…

关于FCN的数据集着色说明

前方我们讲解了《 FCN-数据篇》。里面包含了如何制作类似pascal voc的label。很大篇幅在谈如何着色&#xff0c;如何转化为索引图像。 由于一些内容参考网上的资料&#xff0c;所以对里面的一些操作含义也有些糊涂。 其实网上的东西也不都对&#xff0c;很多人云亦云。所以需要…

Android Property Animation动画

3.0以前&#xff0c;android支持两种动画模式&#xff0c;tween animation,frame animation&#xff0c;在android3.0中又引入了一个新的动画系统&#xff1a;property animation&#xff0c;这三种动画模式在SDK中被称为property animation,view animation,drawable animation…

Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)

不多说&#xff0c;直接上干货&#xff01; 前期博客 Ubuntu14.04下Mongodb&#xff08;离线安装方式|非apt-get&#xff09;安装部署步骤&#xff08;图文详解&#xff09;&#xff08;博主推荐&#xff09; Ubuntu14.04下Mongodb官网安装部署步骤&#xff08;图文详解&#x…

tensorboard使用_colab打不开tensorboard的解决办法

2020.4.1更新&#xff1a;colab现在自带tensorboard的魔术方法了&#xff0c;用这个命令就能展示tensorboard%load_ext tensorboard %tensorboard --logdir ./log/train# 加载一次后&#xff0c;如果要重新加载&#xff0c;就需要使用reload方法 %reload_ext tensorboard %tens…

小程序“自定义关键词”功能的常见问答

我们知道小程序可以通过线下扫码、公众号、好友分享、长按小程序码、搜索小程序名称来找到&#xff0c;现在又多了一个新方式——小程序后台新增自定义关键词功能&#xff1a;已发布小程序的开发者&#xff0c;可提交最多10个与小程序业务相关的关键词&#xff0c;帮助你的小程…

语义分割深度学习方法集锦

转载&#xff1a;https://github.com/handong1587/handong1587.github.io/edit/master/_posts/deep_learning/2015-10-09-segmentation.md Papers Deep Joint Task Learning for Generic Object Extraction intro: NIPS 2014homepage: http://vision.sysu.edu.cn/projects/d…

员工培训与开发实训心得体会_公司新员工培训心得体会800字范文

点击蓝字关注我们培训是一次能够快速提升我们的机会&#xff0c;而每个新员工也是通过培训尽快的融入公司的。因此&#xff0c;我们要更加重视培训一些!下面是小编为大家整理的公司新员工培训心得体会&#xff0c;希望对大家有帮助。公司新员工培训心得体会800字为了让我们新进…

Nginx ab压力测试

20-ab压力测试及nginx性能统计模块 优化的启发&#xff0c;打开的文件太多 Nginx 错误日志显示&#xff0c;打开文件数太多 系统层面 more /proc/sys/net/core/somaxconn 单个Nginx 测试index.html 没优化前 [root/home/www]#ab -c 4000 -n 100000 http://test.demo.com/inde…

Code First02---CodeFirst配置实体与数据库映射的两种方式

Code First有两种配置数据库映射的方式&#xff0c;一种是使用数据属性DataAnnotation&#xff0c;另一种是Fluent API.这两种方式分别是什么呢&#xff1f;下面进行一一解释&#xff1a;DataAnnotation的配置方式需要你给定义实体和值对象的类和类中的属性加上与数据库映射相关…

sigmoid函数的数值稳定性

在深度学习中&#xff0c;我们常常选用sigmoid函数作为激活函数。sigmoid函数的具体形式如下&#xff1a; f(x)11e−xf(x)=\frac{1}{1+e^{-x}}曲线表示为&#xff1a; 再画大一点&#xff0c;取x区间更大一些&#xff0c;则为&#xff1a; 显然从图像上看&#xff0c;sigmoid函…

windows远程连接ubuntu 黑屏_Windows跟Windows远程连接传输文件

关注奕奇科技&#xff0c;学习更多小妙招电脑小知识&#xff0c;值得收藏我们一般在使用windows远程连接时需要传输文件该怎么办&#xff1f;我们可以插入U盘导入导出&#xff0c;但这样很是麻烦而且如果身边暂时没有U盘的情况就要通过社交工具传播文件&#xff0c;大的文件也更…

思维导图分析http之前端组成

思维导图分析http前端组成全文总览本文分为三个部分&#xff1a;前端组成&#xff0c;http协议&#xff0c;http服务器应用程序。http的应用按照我自己的理解分为前端应用以及后端应用&#xff0c;所以我分别写了前端组成以及http服务器应用程序两章&#xff0c;中间穿插了一章…

caffe 关于Deconvolution的初始化注意事项

对于fcn&#xff0c;经常要使用到Deconvolution进行上采样。对于caffe使用者&#xff0c;使用Deconvolution上采样&#xff0c;其参数往往直接给定&#xff0c;不需要通过学习获得。 给定参数的方式很有意思&#xff0c;可以通过两种方式实现&#xff0c;但是这两种方式并非完…

多目标进化优化_SDIM 学术讲座|分解多目标优化与帕累托多任务学习

分解多目标优化与帕累托多任务学习2020年11月4日晚&#xff0c;香港城市大学电脑学系讲座教授、博士生导师、IEEE Fellow张青富教授应我院王振坤教授的邀请&#xff0c;在线举办了一场主题为“分解多目标优化与帕累托多任务学习”的学术讲座。此次讲座采用线上和线下两种渠道&a…

安装oracle-java,并覆盖原先的OpenJDK

Centos默认安装openJDK只安装了java,没有安装javac.如果需要安装javac&#xff0c;需要install the openjdk-8-jdk package。参考&#xff1a;http://openjdk.java.net/install/ 为了完整地安装java&#xff0c;我们转而选择使用oracle-java&#xff0c;由于我们没有root权限&a…

反射创建对象_如何应用Java反射技术灵活地创建程序类的对象实例

软件项目实训及课程设计指导——如何应用Java反射技术灵活地创建程序类的对象实例1、如何应用属性配置文件实现对系统中的配置信息进行读写操作Java中的属性配置文件主要可以作为软件应用系统及项目的配置文件&#xff0c;比如许多J2EE的开源框架系统中都提供了属性配置文件作为…

js回到顶部

2019独角兽企业重金招聘Python工程师标准>>> <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"> <title></title> <style type"text/css"> #control_pannel …

OSEK简介

What is OSEKA specification for an RTOS•With standard software interfaces (OS API)•Including intertask & interprocessor communication (COM)•Including network management (NM)•Including the language used to statically declare OS elements used in an a…