正則表達(dá)式

在編寫處理字符串的程序或網(wǎng)頁時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具望众。換句話說,正則表達(dá)式就是記錄文本規(guī)則的代碼。
很可能你使用過Windows/Dos下用于文件查找的通配符(wildcard)烂翰,也就是*和?夯缺。如果你想查找某個(gè)目錄下的所有的Word文檔的話,你會(huì)搜索*.doc甘耿。在這里踊兜,*會(huì)被解釋成任意的字符串。和通配符類似佳恬,正則表達(dá)式也是用來進(jìn)行文本匹配的工具捏境,只不過比起通配符,它能更精確地描述你的需求——當(dāng)然毁葱,代價(jià)就是更復(fù)雜——比如你可以編寫一個(gè)正則表達(dá)式垫言,用來查找所有以0開頭,后面跟著2-3個(gè)數(shù)字倾剿,然后是一個(gè)連字號(hào)“-”筷频,最后是7或8位數(shù)字的字符串(像010-12345678或0376-7654321)。
推薦學(xué)習(xí)30分鐘入門教程(ps:當(dāng)然你可能不止花費(fèi)30分鐘-):http://deerchao.net/tutorials/regex/regex.htm
Python堆正則表達(dá)式的支持:

compile

compile(pattern, flags=0)
編譯正則表達(dá)式返回正則表達(dá)式對(duì)象

match

match(pattern, string, flags=0)
用正則表達(dá)式匹配字符串前痘,匹配成功返回匹配對(duì)象凛捏,否則返回None。從第一個(gè)字符開始匹配芹缔。

search

search(pattern, string, flags=0)
搜索字符串中第一次出現(xiàn)正則表達(dá)式的模式坯癣,匹配成功返回匹配對(duì)象,否則返回None乖菱,可以從任意位置開始匹配坡锡。

findall 和 finditer

findall(pattern, string, flags=0)
查找字符串所有與正則表達(dá)式匹配的模式,并返回一個(gè)列表窒所。
finditer(pattern, string, flags=0)
查找字符串所有與正則表達(dá)式匹配的模式鹉勒,并且返回一個(gè)迭代器。span返回匹配的位置吵取,group返回匹配的內(nèi)容禽额。
下面這個(gè)實(shí)例是查找出字符串中所有的電話號(hào)碼,用findall 和 finditer 兩種方式查找

import re


def phone_num():
    patter1 = re.compile(r'(?<=\D)1[345789]\d{9}(?=\D)')
    sentence = '重要的事情說8130087690870遍,我的手機(jī)號(hào)是13567672929皮官,不是13789890976脯倒!'
    # 找出所有匹配的內(nèi)容 返回一個(gè)列表
    my_list = patter1.findall(sentence)
    print(my_list)
    # iter - iterator 迭代器
    for temp in patter1.finditer(sentence):
        print(temp)
        print(temp.span())
        print(temp.group())

if __name__ == '__main__':
    phone_num()

sub

sub(pattern, repl, string, count=0, flags=0)
用指定的字符串替換原字符串中與正則表達(dá)式匹配的模式,
patter需要替換的字符捺氢,repl用作替換的內(nèi)容藻丢,string指定的字符串,count指定替換的次數(shù)摄乒,flags設(shè)置是否忽略大小寫悠反。

import re


def main():
    sentence = '馬化騰傻逼操你大爺fuck你'
    # 內(nèi)容替換
    # 正則表達(dá)式 替換符 替換的內(nèi)容 是否忽略大小寫
    pure = re.sub('[操草艸]|傻逼|fuck|馬化騰', '*', sentence, flags=re.IGNORECASE)
    print(pure)

if __name__ == '__main__':
    main()

注意:替換符可以是字符/字符串/可調(diào)用的函數(shù)残黑,下面這個(gè)例子的替換內(nèi)容就是一個(gè)函數(shù)。

from re import sub


def foo(mo):
    # mo - 匹配對(duì)象
    # group返回匹配的對(duì)象斋否,傳入?yún)?shù)foo1梨水,這是一個(gè)組名,返回此組的匹配的內(nèi)容
    # mo.group('foo1') - 返回名稱為foo1組里的文本
    value = int(mo.group('foo1'))
    return str(value ** 2)


def main():
    sentence = 'fgkfshf12hdjsh876hdf962hf'
    # (?P<foo1>\d+) 匹配一個(gè)或多個(gè)數(shù)字茵臭,并捕獲文本到名稱為foo1的組里
    # 注意:Python中必須加上P
    print(sub(r'(?P<foo1>\d+)', foo, sentence))


if __name__ == '__main__':
    main()

運(yùn)行結(jié)果:字符串中所有的數(shù)字都被替換成了其平方

fgkfshf144hdjsh767376hdf925444hf

split

split(pattern, string, maxsplit=0, flags=0)
patter拆分依據(jù)疫诽,string指定的字符串,flags設(shè)置是否忽略大小寫旦委。

def main():
    sentence1 = 'you go your way, i will go home!'
    # 按照空白符字符拆分
    mylist = re.split(r'[ ,!]', sentence1)
    print(mylist)


if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奇徒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子社证,更是在濱河造成了極大的恐慌逼龟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件追葡,死亡現(xiàn)場離奇詭異腺律,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宜肉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門匀钧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谬返,你說我怎么就攤上這事之斯。” “怎么了遣铝?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵佑刷,是天一觀的道長。 經(jīng)常有香客問我酿炸,道長瘫絮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任填硕,我火速辦了婚禮麦萤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扁眯。我一直安慰自己壮莹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布姻檀。 她就那樣靜靜地躺著命满,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绣版。 梳的紋絲不亂的頭發(fā)上胶台,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天狭莱,我揣著相機(jī)與錄音,去河邊找鬼概作。 笑死,一個(gè)胖子當(dāng)著我的面吹牛默怨,可吹牛的內(nèi)容都是我干的讯榕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼匙睹,長吁一口氣:“原來是場噩夢啊……” “哼愚屁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痕檬,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤霎槐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梦谜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丘跌,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年唁桩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闭树。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荒澡,死狀恐怖报辱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情单山,我是刑警寧澤碍现,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站米奸,受9級(jí)特大地震影響昼接,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躏升,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一辩棒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膨疏,春花似錦一睁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饲帅,卻和暖如春复凳,著一層夾襖步出監(jiān)牢的瞬間瘤泪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工育八, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对途,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓髓棋,卻偏偏與公主長得像实檀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子按声,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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