Python 正則表達式

基礎(chǔ)

直接給出字符血筑,就是精確匹配
\d匹配一個數(shù)字
\w匹配一個字母或數(shù)字
.匹配任意字符
*表示任意個字符(包括0個)
+表示至少一個字符
?表示0個或1個字符
{n}表示n個字符
{n,m}表示n-m個字符
\s匹配一個空格(也包括Tab等空白符)

正則特殊字符需要用\轉(zhuǎn)義

[]表示范圍如[0-9a-zA-Z_]可以匹配一個數(shù)字玻侥、字母或者下劃線炫刷;
A|B可以匹配A或B 所以(P|p)ython可以匹配'Python'或者'python'
^表示行的開頭,^\d表示必須以數(shù)字開頭云芦。
$表示行的結(jié)束瓶颠,\d$表示必須以數(shù)字結(jié)束匾浪。

re模塊
判斷正則表達式是否匹配:
>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
>>>
如果匹配成功,返回一個Match對象匈睁,否則返回None


test = '用戶輸入的字符串'
if re.match(r'正則表達式', test):
    print('ok')
else:
    print('failed')

切分字符串
>>> re.split(r'\s+', 'a b   c')
['a', 'b', 'c']

>>> re.split(r'[\s\,\;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']
分組
比如:

^(\d{3})-(\d{3,8})$分別定義了兩個組监透,可以直接從匹配的字符串中提取出區(qū)號和本地號碼:



>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

貪婪匹配
正則匹配默認是貪婪匹配,也就是匹配盡可能多的字符
匹配出數(shù)字后面的0
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
由于\d+采用貪婪匹配航唆,直接把后面的0全部匹配了胀蛮,結(jié)果`0*`只能匹配空字符串了。

必須讓`\d+`采用非貪婪匹配(也就是盡可能少匹配)糯钙,才能把后面的0匹配出來粪狼,加個`?`就可以讓`\d+`采用非貪婪匹配:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
編譯

當我們在Python中使用正則表達式時,re模塊內(nèi)部會干兩件事情:
1任岸、編譯正則表達式再榄,如果正則表達式的字符串本身不合法,會報錯享潜;
2困鸥、用編譯后的正則表達式去匹配字符串。
如果一個正則表達式要重復使用幾千次剑按,出于效率的考慮疾就,我們可以預編譯該正則表達式,接下來重復使用時就不需要編譯這個步驟了吕座,直接匹配:

>>> import re
# 編譯:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')

編譯后生成Regular Expression對象虐译,由于該對象自己包含了正則表達式,所以調(diào)用對應的方法時不用給出正則字符串吴趴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漆诽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锣枝,更是在濱河造成了極大的恐慌厢拭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇叁,死亡現(xiàn)場離奇詭異供鸠,居然都是意外死亡,警方通過查閱死者的電腦和手機陨闹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門楞捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薄坏,“玉大人,你說我怎么就攤上這事寨闹〗鹤梗” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵繁堡,是天一觀的道長沈善。 經(jīng)常有香客問我,道長椭蹄,這世上最難降的妖魔是什么闻牡? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮绳矩,結(jié)果婚禮上罩润,老公的妹妹穿的比我還像新娘。我一直安慰自己埋酬,他們只是感情好哨啃,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著写妥,像睡著了一般拳球。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珍特,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天祝峻,我揣著相機與錄音,去河邊找鬼扎筒。 笑死,一個胖子當著我的面吹牛嗜桌,可吹牛的內(nèi)容都是我干的奥溺。 我是一名探鬼主播骨宠,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼层亿!你這毒婦竟也來了桦卒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匿又,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碌更,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞慎,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年嘿棘,在試婚紗的時候發(fā)現(xiàn)自己被綠了拢蛋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔫巩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圆仔,到底是詐尸還是另有隱情,我是刑警寧澤坪郭,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布脉幢,位于F島的核電站歪沃,受9級特大地震影響嫌松,放射性物質(zhì)發(fā)生泄漏沪曙。R本人自食惡果不足惜萎羔,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贾陷。 院中可真熱鬧,春花似錦髓废、人聲如沸巷懈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋譬。三九已至,卻和暖如春犯助,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剂买。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工癌蓖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婚肆,地道東北人租副。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓较性,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赞咙。 傳聞我的和親對象是個殘疾皇子责循,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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

  • re模塊手冊 本模塊提供了和Perl里的正則表達式類似的功能,不關(guān)是正則表達式本身還是被搜索的字符串攀操,都可以...
    喜歡吃栗子閱讀 4,009評論 0 13
  • 前言: 什么是正則表達式院仿? 正則表達式(Regular expressions 也稱為 REs速和,或 regexes...
    小喜_ww閱讀 3,689評論 3 7
  • 正則表達式 1. 正則表達式概述 正則表達式,又稱正規(guī)表示式颠放、正規(guī)表示法、正規(guī)表達式碰凶、規(guī)則表達式若贮、常規(guī)表示法(英語...
    PythonMaO閱讀 1,272評論 0 1
  • 此內(nèi)容為個人學習用痒留,且大多為轉(zhuǎn)載,特此說明伸头。如果原作者介意的話,請留言恤磷,我會盡快刪除。 原文([廖雪峰的官方網(wǎng)站]...
    Druids閱讀 569評論 0 2
  • 年少時無論去哪串門扫步,我媽總不忘記反復叮囑:出門嘴巴不甜沒關(guān)系,腿要勤快點河胎!我也總用一句“我知道啦”敷衍了事。 想我...
    桃花馬閱讀 204評論 0 0