Python之正則表達式和JSON(五)

今天我們來學習Python的正則表達式,我想接觸過其他語言的朋友一定不陌生,正則表達式并不是python特有的于微,其他語言也有正則表達式唯沮。

正則表達式的官方介紹為:正則表達式,又稱規(guī)則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)奈嘿,計算機科學的一個概念。正則表達式通常被用來檢索吞加、替換那些符合某個模式(規(guī)則)的文本裙犹。

學習點

在python中使用正則表達式尽狠,需要在文件頭部引入正則表達式的內置對象才能使用

import re

常用的方法為

re.findAll()

例1 匹配數字

import re

a='hdhfdh55df5df49d+'
r=re.findall('\d',a)   
print(r)

輸出:['5', '5', '5', '4', '9']

解釋:

方法中的第一個參數 /d 表示只匹配字符串中的數字,第二個參數 a 表示需要操作的字符串變量

想了解更多的正則表達式方法可自行進行百度學習叶圃,這里只進行部分常見的規(guī)則進制學習袄膏。

例2 字符集

#字符集
import re

a='abc,abd,acc,abd,asd'
r=re.findall('a[cb]d',a)
s=re.findall('a[^cb]d',a)
print(r)
print(s)

輸出1:['abd', 'abd']
輸出2:['asd']

解釋:

方法中第一個參數使用了 [cd ] 這個符號,表示只要子子串中出現了其中一個都會匹配上盗似,反之如果是這樣 [^cd ] 符號中加了 ^ 符號則表示子串中只要包含了其中一個字符都不會被匹配上

例3 概括字符集

#概括字符集
import re

#\d  數字 \D  非
#\w   單詞字符   \W  非
# \s 空白字符   \S 非
a='5566dfd5fdg5gs26s0'

r=re.findall('[1-9]',a)
s=re.findall('[^0-9]',a)
f=re.findall('\w',a)
print(r)
print(s)
print(f)

輸出:

['5', '5', '6', '6', '5', '5', '2', '6']
['d', 'f', 'd', 'f', 'd', 'g', 'g', 's', 's']
['5', '5', '6', '6', 'd', 'f', 'd', '5', 'f', 'd', 'g', '5', 'g', 's', '2', '6',
's', '0']

解釋:

[1-9] 表示只匹配數字
[^0-9] 表示匹配除去數字外的字符
\w 表示匹配打個詞的字符

例4:數量詞

#數量詞
import re

a='5566dfd5fdg5gs26s0'
r=re.findall('[a-z]{2,6}',a)
s=re.findall('[a-z]{2,6}?',a)
#貪婪  與 非貪婪
#python 默認貪婪
#非貪婪 后面加問號
print(r)
print(s)

輸出:

['dfd', 'fdg', 'gs']
['df', 'fd', 'gs']

解釋:

[a-z]{2,6} 表示只匹配連續(xù)的2到6個英文字符的子串哩陕,匹配盡可能多的連續(xù)字符 (貪婪的
[a-z]{2,6}? 表示只匹配連續(xù)的2到6個英文字符的子串,但它是非貪婪的赫舒,所以它匹配的總是匹配最少額連續(xù)字符悍及,總是匹配連續(xù)的2個字符 (非貪婪的

  • Python里數量詞默認是貪婪的(在少數語言里也可能是默認非貪婪),總是嘗試匹配盡可能多的字符接癌;非貪婪則相反心赶,總是嘗試匹配盡可能少的字符
#數量詞
#*  匹配0次或者無限次
#? 匹配0次或者1次
#+  匹配1次或者無限次
import re

a='pytho5python4pythonn2'

r=re.findall('python?',a)
r2=re.findall('python*',a)
r3=re.findall('python+',a)

print(r)
print(r2)
print(r3)

輸出:

['pytho', 'python', 'python']
['pytho', 'python', 'pythonn']
['python', 'pythonn']

例5 邊界匹配

#邊界匹配
import re
qq='100001'
#4~8
r=re.findall('01$',qq)
print(r)

輸出:

['01']

解釋:

01$ 表示只要字符串最后為 01 則輸出01

例6 組

#組  ()
import re

a='pythonpythonpython222'
r = re.findall('(python){3}',a)

print(r)

輸出:

['python']

解釋:

(python){3} 表示只要字符串有連續(xù)3組 python 字符串 則輸出 python

例7 第三個參數

#第三個參數
import re

a='PythonC#Java'
#.號匹配任何字符包括換行符 \n

r=re.findall('C#.{1}',a,re.I)

# re.I 表示忽略大小寫   re.S 表示改變.號的行為
# r=re.findall('C#.{1}',a,re.I | re.S)
print(r)

輸出:

['C#J']

解釋:

C#.{1} 著重使用 點 字符 匹配后面任何一個字符
re.I 第三個參數就是結合 點號使用的

例8 替換

#替換  
import re
a='PythonC#Java'
# 1表示只替換第一個 
r = re.sub('C#','GO',a,1)

#內置函數替換
b = a.replace("C#","GO")

print(b)
print(r)

輸出:

PythonGOJava
PythonGOJava

解釋:

re.sub('C#','GO',a,1) 使用字符串 GO 替換 字符串 C# 并且只替換 a 字符串中第一個出現的 C# 子串

例9 使用函數替換操作

# 使用函數替換操作
import re
a ='Abc5566555'

#函數
def show(value):
    #打印出來的是一個對象
    #print(value)
    #獲取集體的值
    matched = value.group()
    if int(matched) >= 6:
        return '9'
    else:
        return "7"

r = re.sub('65',show,a)

print(r)

輸出:

Abc556955

解釋:

這個邏輯比較難理解缺猛,就是字符串需要替換 65 但65又作為參數傳入 show()函數中缨叫,通過一系列的操作,獲取到 int 類型的65 再與 6 比較 若 65 大于等于 6 則字符串 a 中的65替換為9 反之替換為 7

例10 其他函數匹配

import re
#其他函數匹配
s = 'C55ff55566'
r = re.match('\d',s)
print(r)
#獲取匹配的位置
print(r.span())
r2 = re.search('\d',s)
print(r2)
#獲取值
print(r2.group())

(不知為何荔燎,本地未成功輸出)

注:與 findAll() 不同之處為他們都只匹配一次

例11 較復雜組() 匹配

import re

s = 'int sdf= dfd d, python , i love java'

#使用組匹配  ()  ,可以多個組
r = re.findall('int(.*)python(.*)java',s)

print(r.group(1,2))
#獲取全部組
print(r.groups())

(不知為何耻姥,本地未成功輸出)

  • 一共剛好 11 個例子 ,今天剛好 11.11
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末有咨,一起剝皮案震驚了整個濱河市琐簇,隨后出現的幾起案子,更是在濱河造成了極大的恐慌座享,老刑警劉巖婉商,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異渣叛,居然都是意外死亡丈秩,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門淳衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蘑秽,“玉大人,你說我怎么就攤上這事箫攀〕ι” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵匠童,是天一觀的道長。 經常有香客問我塑顺,道長汤求,這世上最難降的妖魔是什么俏险? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮扬绪,結果婚禮上竖独,老公的妹妹穿的比我還像新娘。我一直安慰自己挤牛,他們只是感情好莹痢,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著墓赴,像睡著了一般竞膳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诫硕,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天坦辟,我揣著相機與錄音,去河邊找鬼章办。 笑死锉走,一個胖子當著我的面吹牛,可吹牛的內容都是我干的藕届。 我是一名探鬼主播挪蹭,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼休偶!你這毒婦竟也來了梁厉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤椅贱,失蹤者是張志新(化名)和其女友劉穎懂算,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體庇麦,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡计技,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了山橄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮媒。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖航棱,靈堂內的尸體忽然破棺而出睡雇,到底是詐尸還是另有隱情,我是刑警寧澤饮醇,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布它抱,位于F島的核電站,受9級特大地震影響朴艰,放射性物質發(fā)生泄漏观蓄。R本人自食惡果不足惜混移,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侮穿。 院中可真熱鬧歌径,春花似錦、人聲如沸亲茅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽克锣。三九已至茵肃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娶耍,已是汗流浹背免姿。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榕酒,地道東北人胚膊。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像想鹰,于是被迫代替她去往敵國和親紊婉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容

  • Python中的正則表達式(re) import rere.match #從開始位置開始匹配辑舷,如果開頭沒有則無re...
    BigJeffWang閱讀 7,077評論 0 99
  • 搞懂Python 正則表達式用法 Python 正則表達式 正則表達式是一個特殊的字符序列喻犁,它能幫助你方便的檢查一...
    廈熱閱讀 1,582評論 0 2
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,587評論 0 23
  • 3月5日學習雷鋒日,瞬間耳旁響起“學習雷鋒好榜樣何缓,忠于革命忠于黨肢础。愛憎分明不忘本,立場堅定斗志強.......
    望凝梅閱讀 138評論 0 1
  • 《活法》是一位成功企業(yè)家稻盛和夫的生活感悟碌廓,作者并沒有講述其成功哲學的意思传轰,而是講述他對生活本源的認識和感悟。對于...
    Evas77閱讀 507評論 1 1