正則表達式範圍匹配

前言html

近期小編在進行評測語料的製做時,涉及到一些複雜字符串的過濾和提取等內容,例如找出某一句話中在某個特定語句結構下出現的文字,雖然使用循環,if-else等語句能夠搞定,可是比較麻煩,使用正則表達式處理就比較方便。python

No.1web

正則表達式定義正則表達式

正則表達式,又稱正規表達式(英文:Regular Expression,RE),它使用單個字符串來描述,匹配一系列符合某個句法規則的字符串,在不少的文本編輯器裏,正則表達式一般被用來檢索和替換那些匹配某個模式的文本。微信


No.2架構

正則表達式使用併發

舉個栗子,假設使用爬蟲得到一個HTML源碼,其中一段爲:app

str1=r"<html><body><h1>hello.world<h1></body></html><h1>hello:world<h1><h1>helloAworld<h1>"

這時候若是想提取全部的hello(x)world,一般須要對字符串進行split操做等,可是當第二個<h1>變爲</h1>, 問題就會變得複雜起來。而用以下正則表達式則能夠直接將hello(x)word提取出來:編輯器

import rep1 = r"hello.world"pattern =re.compile(p1)print(re.findall(pattern, str1))

其中,p1爲正則表達式字符串,hello與world之間.」爲一個能夠匹配任何字符的元字符(後面有介紹),pattern爲通過編譯後獲得的正則表達式對象,這樣作的目的是便於後面的匹配中能夠複用,上述表達式獲得結果爲:分佈式


No.3

正則表達式匹配方法

除了上面介紹的findall方法以外,正則表達式經常使用的匹配方法還有 match和search,三者之間的區別爲:

match:從字符串的起始位置匹配正則表達式,若是匹配,就返回匹配成功的結果;若是不匹配,就返回None;

search: 它在匹配時會掃描整個字符串,而後返回第一個成功匹配的結果,若是搜索完了還沒找到,則返回None;

findall: 該方法會搜索整個字符串,而後返回一個list,匹配正則表達式的全部內容。


No.4

正則表達式範圍匹配

在一段字符串內,咱們能夠在一段範圍內選擇要或者不要某些字符,例若有以下字符串:

str2 = r"lap &ap nap rap xap xap pap"

對於str2,咱們想要除了&ap以外的全部正常的字符串,經過以下表達式便可完成:

p2 = r"[lnrxp]ap" #字母開頭ap都要pattern = re.compile(p)print (re.findall(pattern,str2))

上述代碼獲得的結果爲:

上述正則表達式中,對於str2中存在類別較少的(x)ap,當有26個字母而且區分大小寫時使用該語句顯然不現實,Python內置了不少簡潔的正則表達式,避免咱們在提取的過程當中須要把想要的字母一個個寫出來,常見的有:

  • [0-9]0123456789任意之一

  • [a-z]小寫字母任意之一

  • [A-Z]大寫字母任意之一

  • \d    等同於[0-9]

  • \D    等同於[^0-9]即匹配非數字

  • \w    等同於[a-z0-9A-Z]匹配大小寫字母,數字和下劃線

  • \W    等同於上一條取非

所以對於上述正則表達式p2,使用r"\wap",r「[a-z]ap」獲得的結果是同樣的。此外咱們在前面已經介紹過「.」元字符,在p2中,「[]」也是一個元字符,它表示的是當前表達式匹配[]內任意的字符。Python中還內置了不少元字符,方便了咱們在寫正則表達式時可以更簡潔的表述。讀者能夠訪問一下網址來查看定義:https://www.runoob.com/regexp/regexp-metachar.html。


No.5

正則表達之貪心與懶惰

假設有以下字符串:

str3 = r"sogoutest@sogou-inc.com.cn"

咱們想要把str3中從@開始一直到「.」以前的內容匹配出來,則能夠這樣去實現

p3 = r"@.+\."pattern= re.compile(p3)print (re.findall(pattern,str3))

其中,「+」也是也是一個元字符,表示匹配前面的最近的字符一次或屢次,能夠看到,此時表達式儘量多地進行匹配,匹配到了com後面的「.」,即貪心模式。若只想匹配到第一個點結束,便可使用以下語句改成懶惰模式。

p3 = r"@.+?\."pattern= re.compile(p3)print (re.findall(pattern,str3))

此時咱們能夠看到,結果在匹配到inc後面的「.」就結束了。

參考連接:

1.https://www.py.cn/spider/guide/14488.html

2.https://www.py.cn/faq/python/12021.html

3.https://www.runoob.com/regexp/regexp-metachar.html

結語

2020/03/17

正則表達式在處理字符串時做用很大,結合Python提供的元字符列表能夠實現功能更多更復雜的語句,針對同一個問題的解決方式可能會有不少種,須要在平時使用中加以運用熟練掌握。



正則表達式往期推文:
一塊兒來了解一下正則表達式



文章合集

Selenium | Appium  | Jenkins  |  Jmeter 

軟件測試方法彙總 Postman接口參數化 | 測試用例設計

視頻教程

Selenium | Appium | Jenkins | Jmeter

往期性能推文:

01|性能綜述: 性能測試的概念究竟是什麼?(深度好文)

02|性能綜述: TPS和響應時間之間是什麼關係?

03|性能綜述: 怎麼理解TPS、QPS、RT、吞吐量這些性能指標?

04|JMeter和LoadRunner:要知道工具僅僅只是工具

05|指標關係:你知道併發用戶數應該怎麼算嗎?
性能測試工具--Locust官方文檔(API)解讀(全)

AWS與Docker

如何使用AWS EC2+Docker+JMeter構建分佈式負載測試基礎架構
Docker容器數據持久化和容器網橋鏈接
Docker刪除image和container
Docker與VM虛擬機的區別以及Docker的特色



END



以爲不錯,能夠點「在看」,或者轉發留言


精彩的內容要和朋友分享

本文分享自微信公衆號 - 軟測小生(ruancexiaosheng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索