正則表達式及其在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.pswp.cn/news/258583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258583.shtml
英文地址,請注明出處:http://en.pswp.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…

使用Firefox或Chrome的雇員表現更好不頻繁跳槽

一家銷售軟件幫助雇主招募雇員和留住雇員的公司Cornerstone OnDemand稱&#xff0c;使用非默認瀏覽器如Firefox或Chrome的雇員表現更好不頻繁跳槽。 這項研究旨在幫助那些跳槽率過高的行業&#xff0c;比如呼叫中心的年跳槽率高達45%。對50000名在線工作評估參與者的數據進行分…

關于FCN的數據集著色說明

前方我們講解了《 FCN-數據篇》。里面包含了如何制作類似pascal voc的label。很大篇幅在談如何著色&#xff0c;如何轉化為索引圖像。 由于一些內容參考網上的資料&#xff0c;所以對里面的一些操作含義也有些糊涂。 其實網上的東西也不都對&#xff0c;很多人云亦云。所以需要…

mongobd python_Python操作MongoDB數據庫PyMongo庫使用方法

引用PyMongo復制代碼 代碼如下:>>> import pymongo創建連接Connection復制代碼 代碼如下:>>> import pymongo>>> conn pymongo.Connection(localhost,27017)或復制代碼 代碼如下:>>> from pymongo import Connection>>> conn C…

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…

angular實現select的ng-options

ng實現簡單的select <div ng-controller"ngSelect"><select ng-model"vm.selectVal" ng-options"o.title for o in vm.optionsData"><option value"">請選擇</option></select> </div> var app …

Ubuntu14.04下Mongodb數據庫可視化工具安裝部署步驟(圖文詳解)(博主推薦)

不多說&#xff0c;直接上干貨&#xff01; 前期博客 Ubuntu14.04下Mongodb&#xff08;離線安裝方式|非apt-get&#xff09;安裝部署步驟&#xff08;圖文詳解&#xff09;&#xff08;博主推薦&#xff09; Ubuntu14.04下Mongodb官網安裝部署步驟&#xff08;圖文詳解&#x…

deeplab運行指南

以下僅僅為一個總結&#xff0c;參考了網上的眾多資料&#xff0c;僅備忘記。 主要鏈接 deeplab主頁&#xff1a;http://liangchiehchen.com/projects/DeepLab.html官方代碼&#xff1a;https://bitbucket.org/aquariusjay/deeplab-public-ver2python 版caffe實現&#xff1a…

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…

構造函數為什么不能是虛函數 ( 轉載自C/C++程序員之家)

從存儲空間角度&#xff0c;虛函數對應一個指向vtable虛函數表的指針&#xff0c;這大家都知道&#xff0c;可是這個指向vtable的指針其實是存儲在對象的內存空間的。問題出來了&#xff0c;如果構造函數是虛的&#xff0c;就需要通過 vtable來調用&#xff0c;可是對象還沒有實…

小程序“自定義關鍵詞”功能的常見問答

我們知道小程序可以通過線下掃碼、公眾號、好友分享、長按小程序碼、搜索小程序名稱來找到&#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函…

查看CentOS版本方法

有以下命令可以查看&#xff1a; # lsb_release -a LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarchDistributor ID: CentOSDescription: CentOS release 5.4 (Final)Release: 5.4Codename: Final這個命令適用于所有的li…

windows遠程連接ubuntu 黑屏_Windows跟Windows遠程連接傳輸文件

關注奕奇科技&#xff0c;學習更多小妙招電腦小知識&#xff0c;值得收藏我們一般在使用windows遠程連接時需要傳輸文件該怎么辦&#xff1f;我們可以插入U盤導入導出&#xff0c;但這樣很是麻煩而且如果身邊暫時沒有U盤的情況就要通過社交工具傳播文件&#xff0c;大的文件也更…

思維導圖分析http之前端組成

思維導圖分析http前端組成全文總覽本文分為三個部分&#xff1a;前端組成&#xff0c;http協議&#xff0c;http服務器應用程序。http的應用按照我自己的理解分為前端應用以及后端應用&#xff0c;所以我分別寫了前端組成以及http服務器應用程序兩章&#xff0c;中間穿插了一章…