一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 正則表達式 - Python中正則表達式的巧妙使用一文包你必掌握正則

Python中正則表達式的巧妙使用一文包你必掌握正則

2020-09-03 16:02編程python新視野 正則表達式

正則表達式就是從字符串中發現規律,并通過“抽象”的符號表達出來。這篇文章主要介紹了Python中正則表達式的巧妙使用,需要的朋友可以參考下

前言

正則表達式就是從字符串中發現規律,并通過“抽象”的符號表達出來。打個比方,對于2,5,10,17,26,37這樣的數字序列,如何計算第7個值,肯定要先找該序列的規律,然后用n2+1這個表達式來描述其規律,進而得到第7個值為50。對于需要匹配的字符串來說,同樣把發現規律作為第一步,本文主要使用正則表達式完成字符串的查詢匹配、替換匹配和分割匹配。

Python中正則表達式的巧妙使用一文包你必掌握正則

常用的正則符號

在進入字符串的匹配之前,先來了解一下都有哪些常用的正則符號,見下表所示:

Python中正則表達式的巧妙使用一文包你必掌握正則

如果讀者能夠比較熟練地掌握上表中的內容,相信在字符串處理過程中將會游刃有余。如前文所說,本節將基于正則表達式完成字符串的查詢、替換和分割操作,這些操作都需要導入re模塊,并使用如下介紹的幾個函數。

字符串的匹配查詢

re模塊中的findall函數可以對指定的字符串進行遍歷匹配,獲取字符串中所有匹配的子串,并返回一個列表結果。該函數的參數含義如下:

findall(pattern, string, flags=0)

pattern:指定需要匹配的正則表達式。

string:指定待處理的字符串。

flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是讓正則表達式對大小寫不敏感;re.M的模式是讓正則表達式可以多行匹配;re.S的模式指明正則符號.可以匹配任意字符,包括換行符 ;re.X模式允許正則表達式可以寫得更加詳細,如多行表示、忽略空白字符、加入注釋等。

字符串的匹配替換

re模塊中的sub函數的功能是替換,類似于字符串的replace方法,該函數根據正則表達式把滿足匹配的內容替換為repl。該函數的參數含義如下:

sub(pattern, repl, string, count=0, flags=0)

pattern:同findall函數中的pattern。

repl:指定替換成的新值。

string:同findall函數中的string。

count:用于指定最多替換的次數,默認為全部替換。

flags:同findall函數中的flags。

字符串的匹配分割

re模塊中的split函數是將字符串按照指定的正則表達式分隔開,類似于字符串的split方法。該函數的具體參數含義如下:

split(pattern, string, maxsplit=0, flags=0)

pattern:同findall函數中的pattern。

maxsplit:用于指定最大分割次數,默認為全部分割。

string:同findall函數中的string。

flags:同findall函數中的flags。

實戰案例

如果上面的函數和參數含義都已經掌握了,還需要進一步通過案例加強理解,接下來舉例說明上面的三個函數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 導入用于正則表達式的re模塊
import re
# 取出字符串string8中所有的天氣狀態
string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'輕度污染'},{ymd:'2018-01-02',tianqi:'陰~小雨',aqiInfo:'優'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'優'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'優'}"
# 基于正則表達式使用findall函數
print(re.findall("tianqi:'(.*?)'", string8))
# 取出string9中所有含O字母的單詞
string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'
# 基于正則表達式使用findall函數
print(re.findall('w*ow*',string9, flags = re.I))
# 將string10中的標點符號、數字和字母刪除
string10 = '據悉,這次發運的4臺蒸汽冷凝罐屬于國際熱核聚變實驗堆(ITER)項目的核二級壓力設備,先后完成了壓力試驗、真空試驗、氦氣檢漏試驗、千斤頂試驗、吊耳載荷試驗、疊裝試驗等驗收試驗。'
# 基于正則表達式使用sub函數
print(re.sub('[,。、a-zA-Z0-9()]','',string10))
# 將string11中的每個子部分內容分割開
string11 = '22廳 | 101.62平 | 低區/7層 | 朝南
 上海未來 - 浦東 - 金楊 - 2005年建'
# 基于正則表達式使用split函數
split = re.split('[-|
]', string11)
print(split)
# 分割結果的清洗
split_strip = [i.strip() for i in split]
print(split_strip)
out:
['晴', '陰~小雨', '小雨~中雨', '中雨~小雨']
['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of']
據悉這次發運的臺蒸汽冷凝罐屬于國際熱核聚變實驗堆項目的核二級壓力設備先后完成了壓力試驗真空試驗氦氣檢漏試驗千斤頂試驗吊耳載荷試驗疊裝試驗等驗收試驗
['2室2廳 ', ' 101.62平 ', ' 低區/7層 ', ' 朝南 ', ' 上海未來 ', ' 浦東 ', ' 金楊 ', ' 2005年建']
['2室2廳', '101.62平', '低區/7層', '朝南', '上海未來', '浦東', '金楊', '2005年建']

如上結果所示,在第一個例子中通過正則表達式"tianqi:'(.*?)'"實現目標數據的獲取,如果不使用括號的話,就會產生類似"tianqi:'晴'", "tianqi:'陰~小雨'"這樣的值,所以,加上括號就是為了分組,且僅返回組中的內容;

第二個例子并沒有將正則表達式寫入圓括號,如果寫上圓括號也是返回一樣的結果,所以findall就是用來返回滿足匹配條件的列表值,如果有括號,就僅返回括號內的匹配值;

第三個例子使用替換的方法,將所有的標點符號換為空字符,進而實現刪除的效果;

第四個例子是對字符串的分割,如果直接按照正則 '[,。、a-zA-Z0-9()]' 分割的話,返回的結果中包含空字符,如 '2室2廳' 后面就有一個空字符。為了刪除列表中每個元素的首尾空字符,使用了列表表達式,并且結合字符串的strip方法完成空字符的壓縮。

總結

以上所述是小編給大家介紹的Python中正則表達式的巧妙使用一文包你必掌握正則,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:http://developer.51cto.com/art/201905/596697.htm

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好男人影视社区www在线观看 | 韩日视频在线 | 三级伦理在线播放 | 国产日韩欧美视频 | 欧美同性猛男野外gay免费 | 国产51 | 国产露脸对白刺激3p在线 | 久久性综合亚洲精品电影网 | 肥胖女性大bbbbbb视频女厕 | 欧美人禽杂交在线视频 | 日本伦理动漫在线观看 | 久久精品123 | 国产黄频| videos变态极端 | 亚洲欧洲日产国码无码av | 欧美成人午夜片一一在线观看 | 日本三级香港三级久久99 | 亚洲精品国产一区二区三区在 | 无遮无挡免费视频 | 午夜影院小视频 | 亚洲成年男人的天堂网 | 鬼吹灯之天星术免费观看 | 日本情趣视频 | 亚洲精品久久久久AV无码 | 欧美sq| 欧美有码| 精品久久免费观看 | 三级黄色片在线观看 | 秋霞一级黄色片 | 亚洲精品久久久久AV无码 | 国产成人无精品久久久久国语 | 秋霞啪啪片 | juy_661佐佐木明希在线播放 | 亚洲精品老司机福利在线播放 | 日本护士厕所xxx | 国产亚洲高清国产拍精品 | 黑帮大佬与我的365天2标清中文 | 色哟哟哟在线精品观看视频 | www.一区二区三区.com | 日本黄色影院 | jk制服蕾丝超短裙流白浆 |