Python基礎(chǔ)(15)——正則表達式

re.match()

re.match(正則表達式,要匹配的字符串)渡讼,匹配出以字符串的起始位置開始匹配正則表達式,如果匹配陌凳,返回匹配對象(Match Object),否則返回None(注意不是空字符串"")。

import re
print(re.match('hello','hello world'))
print(re.match('world','hello world'))
# <_sre.SRE_Match object; span=(0, 5), match='hello'>
#None

單字符匹配

字符 說明
[] 匹配中括號里任意一個字符
[^] 除了中括號里的字符意外
\s 任意空格
\S 非空格
\d 匹配數(shù)字0-9
\D 匹配非數(shù)字尝胆,表示除了數(shù)字之外的字符
\w 任意字符[A-Za-z0-9]
\W 匹配非單詞字符

點號匹配

import re

result = re.match("A.C", "ABC")
print(result.group())
result = re.match("A.C", "A1C")
print(result.group())

中括號匹配

import re

result = re.match("A[B1D]C", "ABC")
print(result.group())
result = re.match("A[BCD]C", "AGC")
if result:
    print(result.group())

豎線匹配

text = "123test"
regexStr = "(123|txt)"
matchOjc = re.match(regexStr,text)
if matchOjc:
   print(matchOjc.group(1))

開頭結(jié)尾匹配

字符 說明
^ 以箭頭后面的字符開頭
$ 以美元符號前面的字符結(jié)尾
text = "test123"
regexStr = "^t.*3$"
if re.match(regexStr,text):
   print("match")

多個字符匹配

字符 說明
* 匹配前一個字符出現(xiàn)0次或者無限次巢块,即可有可無
+ 匹配前面的字符出現(xiàn)出現(xiàn)1次或者無限次礁阁,即至少有1次
? 匹配前一個字符出現(xiàn)1次或者0次,即要么有1次族奢,要么沒有,同時使貪婪變成非貪婪模式
{m} 匹配前一個字符出現(xiàn)m次
{m,n} 匹配前一個字符出現(xiàn)從m到n次
import re

regStr = '[A-Za-z_]+[\w]*'
result = re.match(regStr, "test_1")
if result:
    print(result.group())
result = re.match(regStr, "1_test")
if result:
    print(result.group())

匹配分組

字符 功能
| 匹配左右任意一個表達式
(ab) 將括號中字符作為一個分組
\num 引用第num分組匹配到的字符串
(?P<name>) 分組起別名
(?P=name) 引用別名為name分組匹配到的字符串
import re

regStr = '[\w]{4,20}@(163|qq|gmail)\.com'
result = re.match(regStr, "test@qq.com")
if result:
    print(result.group())

'r'是防止字符轉(zhuǎn)義的 如果路徑中出現(xiàn)'\t'的話 不加r的話\t就會被轉(zhuǎn)義 而加了'r'之后'\t'就能保留原有的樣子姥闭。

import re

regStr = r'<(\w*)><(\w*)>.*</\2></\1>'
result = re.match(regStr, "<html><head>test</head></html>")
if result:
    print(result.group())
result = re.match(regStr, "<html><head>test</body></html>")
if result:
    print(result.group())

分組別名

import re

regStr = r'<(?P<label1>\w*)><(?P<label2>\w*)>.*</(?P=label2)></(?P=label1)>'
result = re.match(regStr, "<html><head>test</head></html>")
if result:
    print(result.group())
result = re.match(regStr, "<html><head>test</body></html>")
if result:
    print(result.group())

匹配子表達式

使用小括號()將想要提取的內(nèi)容括起來。

import re
content = 'hello 12345 python'
result = re.match('^h\w{4}\s(\d+)\s\w+',content)
print(result.group())
print(result.group(1))
print(result.span())

貪婪匹配

點(.)可以匹配任意字符(除去換行符)星號()代表匹配前面字符的無限次越走。點星(.)組合可以匹配任意字符棚品,但是點星(.)會匹配盡可能多的字符,被認(rèn)為是貪婪匹配.貪婪匹配表達式^h.(\d+)\s\w+造成group(1)只會得到數(shù)字7廊敌,因為點星(.*)會盡可能的取匹配字符铜跑,就把1234也吞噬了,只留下數(shù)字5了

import re
content = 'hello 12345 python'
result = re.match('^h.*(\d+)\s\w+',content)
print(result.group())
print(result.group(1))
print(result.span())
# hello 12345 python
# 5
# (0, 18)

非貪婪匹配

非貪婪匹配的模式在點星后面加一個問號骡澈?即點星問(.*?)是非貪婪匹配锅纺,盡可能的少匹配字符

import re
content = 'hello 12345 python'
result = re.match('^h.*?(\d+)\s\w+',content)
print(result.group())
print(result.group(1))
print(result.span())

匹配修飾符

修飾符 說明
re.I 對大小寫不敏感
re. L 做本地化識別匹配
re. M 多行匹配,影響^和$
re. S 匹配包括換行在內(nèi)的所有字符
import re
content = '''hello 12345
python'''
result = re.match('^h.*?(\d+).*?n$',content,re.S)
print(result.group())
print(result.group(1))
print(result.span())

Search

匹配整個字符串肋殴,直到找到一個匹配的對象囤锉,匹配結(jié)束沒有找到匹配對象才放回None

import re

result = re.search('\d+', "查找數(shù)字:1245")
if result:
    print(result.group())

findall

匹配所有符合規(guī)律的內(nèi)容,返回包含結(jié)果的列表

import re

rList = re.findall('\d+', "查找數(shù)字:1245注冊時11112中1")
for r in rList:
    print(r)
#1245
#11112
#1

sub

re.sub(pattern, repl, string, count=0, flags=0)
使用repl替換string中每一個匹配的子串后返回替換后的字符串疼电。
當(dāng)repl是一個字符串時嚼锄,可以使用\id或\g<id>、\g<name>引用分組蔽豺,但不能使用編號0区丑。
當(dāng)repl是一個方法時,這個方法應(yīng)當(dāng)只接受一個參數(shù)(Match對象)修陡,并返回一個字符串用于替換(返回的字符串中不能再引用分組)沧侥。
count用于指定最多替換次數(shù),不指定時全部替換魄鸦。

import re
content = 'hello12345python'
result = re.sub('\d',"",content)
print(result)
#hellopython
import re


def func(matchObj):
    if matchObj:
        return "python"

print(re.sub(r"\d+", func, 'hello 123'))

split

根據(jù)匹配進行切割字符串宴杀,并返回一個列表

import re

rList = re.split(r':| ', "查找數(shù)字:1245注冊時 11112中1")
for r in rList:
    print(r)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拾因,隨后出現(xiàn)的幾起案子旺罢,更是在濱河造成了極大的恐慌旷余,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁达,死亡現(xiàn)場離奇詭異正卧,居然都是意外死亡,警方通過查閱死者的電腦和手機跪解,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門炉旷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叉讥,你說我怎么就攤上這事窘行。” “怎么了图仓?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵罐盔,是天一觀的道長。 經(jīng)常有香客問我救崔,道長翘骂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任帚豪,我火速辦了婚禮,結(jié)果婚禮上草丧,老公的妹妹穿的比我還像新娘狸臣。我一直安慰自己,他們只是感情好昌执,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布烛亦。 她就那樣靜靜地躺著,像睡著了一般懂拾。 火紅的嫁衣襯著肌膚如雪煤禽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天岖赋,我揣著相機與錄音檬果,去河邊找鬼。 笑死唐断,一個胖子當(dāng)著我的面吹牛选脊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脸甘,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼恳啥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丹诀?” 一聲冷哼從身側(cè)響起钝的,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翁垂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硝桩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沿猜,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年亿柑,在試婚紗的時候發(fā)現(xiàn)自己被綠了邢疙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡望薄,死狀恐怖疟游,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痕支,我是刑警寧澤颁虐,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布侥袜,位于F島的核電站虾标,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏南吮。R本人自食惡果不足惜花嘶,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一笋籽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椭员,春花似錦车海、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埋同,卻和暖如春州叠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凶赁。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工咧栗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哟冬。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓楼熄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浩峡。 傳聞我的和親對象是個殘疾皇子可岂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • python的re模塊--細(xì)說正則表達式 可能是東半球最詳細(xì)最全面的re教程,翻譯自官方文檔,因為官方文檔寫的是真...
    立而人閱讀 22,883評論 4 46
  • re模塊手冊 本模塊提供了和Perl里的正則表達式類似的功能,不關(guān)是正則表達式本身還是被搜索的字符串翰灾,都可以...
    喜歡吃栗子閱讀 4,010評論 0 13
  • #首先缕粹,python中的正則表達式大致分為以下幾部分: 元字符 模式 函數(shù) re 內(nèi)置對象用法 分組用法 環(huán)視用法...
    mapuboy閱讀 1,610評論 0 51
  • 2017年底稚茅,手頭一家公司納稅超過了5萬,可以有資格參加北京的小汽車搖號了平斩。 恰好計劃著再買一輛新能源汽車作為市內(nèi)...
    文介閱讀 311評論 0 2
  • 文/叫我布爺兒 我今天心情很不好绘面。一直跟我一起活動的一個姑娘在下午下課了抓住了我的胳膊欺税,一直詢問了我怎么了,我一直...
    秋玖閱讀 270評論 2 1