Python 正則表達式 - 正則表達式語法

Python 內(nèi)置的字符串處理函數(shù)能夠解決很多的字符串處理問題,但對于比較復雜的情況,內(nèi)置的字符串可能無法處理昔搂,或者處理過程顯得十分不優(yōu)雅句惯。為此土辩,我們需要掌握更強大的文本處理工具 - 正則表達式。

比如抢野,下面的例子拷淘,希望同時使用 .: 作為分隔符切分字符串,就需要用到我們的正則表達式了:

>> import re
>> s = "10::29::30 root: 172.17.73.41 xxxxxxxxxxx"
>> re.split('[:.]+\s*', s)
['10', '29', '30 root', '172', '17', '73', '41 xxxxxxxxxxx']

正則表達式作為處理文本的強大工具指孤,具有非常優(yōu)秀的表達能力启涯。想必熟悉 Linux 系統(tǒng)的用戶可定對通配符很熟悉了,比如恃轩,列出文件名包含 .py 的所有文件:

mia@ubuntu:~$ ls -al *.py*
-rw-r--r-- 1 mia mia 220 Jun 30 08:31 mymode.py
-rw-r--r-- 1 mia mia 602 Jun 30 08:31 mymode.pyc

正則表達式的原理與通配符類似结洼,只不過通配符能匹配的文本范圍非常有限,而正則表達式功能更加強大详恼,相應的也更加復雜补君。

不過,在工作中昧互,很多時候我們只需要使用簡單的正則表達式挽铁,配合 Python 內(nèi)置的正則表達式處理函數(shù),即可在擁有強大表達能力的同時敞掘,降低正則表達式使用的難度叽掘。

合抱之木,生于毫末玖雁。九層之臺更扁,起于壘土。本篇文章,我們就先來了解正則表達式的常用語法浓镜,連載的后續(xù)文章溃列,將繼續(xù)更新 Python 使用正則表達式的具體內(nèi)容。

正則表達式好比工程師定義的過濾文本的模式膛薛。文本處理程序使用定義好的模式去過濾輸入的文本听隐,對于匹配模式的文本將會進一步處理,不匹配模式的文本將會被直接過濾哄啄。

因此雅任,定義模式以及熟悉模式的定義規(guī)則是正則表達式的核心。正則表達式由 普通文本 和 具有特殊意義的符號 組成咨跌。比如沪么,下面的例子中使用 [a-zA-Z]+ 來匹配文本中的單詞:

>> s = "1. Python 之禪中提到:Simple is better than complex."
>> re.findall('[a-zA-Z]+', s)
['Python', 'Simple', 'is', 'better', 'than', 'complex']

再比如,使用 [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 來匹配 IP 地址:

>> s = "10::29::30 root: 172.17.73.41 xxxxxxxxxxx"
>> re.search('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}', s)
<re.Match object; span=(17, 29), match='172.17.73.41'>

上述的正則表達式匹配有點號分隔的 1 到 3 位數(shù)锌半,其中 [0-9] 表示數(shù)字取值范圍请祖,{1,3} 表示重復前面字符 1 ~ 3 次土思。

另外根灯,需要特別注意的是低千,. 在正則表達式中屬于特殊字符,因此這里使用 \. 轉(zhuǎn)義的方式來表示真正的點號運算冗澈。

下面钦勘,我們列出了正則表達式中最長使用的特殊符號及其含義:

正則表達式 描述 示例
^ 行起始標記 ^import numpy 匹配 import numpy 開頭的行
$ 行尾標記 import numpy$ 匹配 import numpy 結(jié)尾的行
. 匹配任意一個字符 -
[] 匹配包含在 [] 之中的任意字符 [pP]ython 匹配 python 和 Python
[^] 匹配 [^] 之外的任意一個字符 9[^56] 匹配 95 , 96 以外的 9x 文本
[-] 匹配 [] 中指定范圍內(nèi)的任意一個字符 [0-9] 匹配 0~9 之間的任意一個數(shù)字;[a-z] 匹配 a~z 之間的任意一個字母
? 匹配之前的項 0 次或 1 次 hel? 匹配 he hel
+ 匹配之前的項 1 次或多次 hel+ 匹配 hel hell ...
* 匹配之前的項 0 次或多次 hel* 匹配 he hel hell ...
{n} 匹配之前的項 n 次 [0-9]{3} 匹配任意一個 3 位數(shù)
{n,} 匹配之前的項最少 n 次 [0-9]{3,} 匹配任意一個 3 位數(shù)或更多的數(shù)字
{n,m} 匹配之前的項 n ~ m 次 [0-9]{2,5} 匹配 2 位數(shù)到 5 位數(shù)之間的任意一個數(shù)字

通過上表我們發(fā)現(xiàn)亚亲,正則表達式中 $ ^ [ ] ( ) 等諸多字符都有特別的含義彻采。如果希望他們作為普通字符,則需要使用轉(zhuǎn)義的方式使用捌归。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肛响,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惜索,更是在濱河造成了極大的恐慌特笋,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巾兆,死亡現(xiàn)場離奇詭異猎物,居然都是意外死亡,警方通過查閱死者的電腦和手機角塑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門蔫磨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圃伶,你說我怎么就攤上這事堤如∑蚜校” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵搀罢,是天一觀的道長蝗岖。 經(jīng)常有香客問我,道長榔至,這世上最難降的妖魔是什么剪侮? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮洛退,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杰标。我一直安慰自己兵怯,他們只是感情好,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布腔剂。 她就那樣靜靜地躺著媒区,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掸犬。 梳的紋絲不亂的頭發(fā)上袜漩,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天,我揣著相機與錄音湾碎,去河邊找鬼宙攻。 笑死,一個胖子當著我的面吹牛介褥,可吹牛的內(nèi)容都是我干的座掘。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼柔滔,長吁一口氣:“原來是場噩夢啊……” “哼溢陪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睛廊,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤形真,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后超全,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咆霜,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年卵迂,在試婚紗的時候發(fā)現(xiàn)自己被綠了裕便。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡见咒,死狀恐怖偿衰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤下翎,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布缤言,位于F島的核電站,受9級特大地震影響视事,放射性物質(zhì)發(fā)生泄漏胆萧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一俐东、第九天 我趴在偏房一處隱蔽的房頂上張望跌穗。 院中可真熱鬧,春花似錦虏辫、人聲如沸蚌吸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羹唠。三九已至,卻和暖如春娄昆,著一層夾襖步出監(jiān)牢的瞬間佩微,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工萌焰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哺眯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓杆怕,卻偏偏與公主長得像族购,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陵珍,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

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

  • 使用正則表達式 正則表達式相關(guān)知識 在編寫處理字符串的程序或網(wǎng)頁時寝杖,經(jīng)常會有查找符合某些復雜規(guī)則的字符串的需要,正...
    赤劍吟龍閱讀 493評論 0 0
  • 正則表達式互纯,又稱規(guī)則表達式瑟幕。(英語:Regular Expression,在代碼中常簡寫為regex留潦、regexp...
    大聖Jonathan閱讀 485評論 0 0
  • 第1章 正則表達式基本概念 字符串匹配可以完成只盹,但是每次匹配,都要單獨寫一次代碼來完成兔院,正則表達式是字符串匹配方法...
    惑也閱讀 574評論 0 5
  • 為什么要用正則表達式 對字符串進行操作幾乎是每種編程語言中最重要的功能之一殖卑。很簡單就可以理解,因為人類進行信息傳播...
    dy2903閱讀 641評論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者坊萝,不喜歡去冒險孵稽,但是人生放棄了冒險许起,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,041評論 0 4