正規表示式筆記(一)

2021-10-07 13:43:11 字數 1368 閱讀 6993

首先,正規表示式不容易。據「先生」教導,表示式比較複雜。學完了之後,會發現自己明白了很多,但是幾乎什麼都不記得。據老師交待,沒接觸過正規表示式的人在看完這篇教程後,能把提到過的語法記住80%以上的可能性為零。但是學完了之後可以明白這裡面的原理。以後還是需要多學習,多使用,才能夠熟練掌握正規表示式。(自己先邊學習邊更吧,看看能更多久,畢竟如果學習工作中用不到的話好像暫時也沒有更新的必要了...)

在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的**。

很可能你使用過windows/dos下用於檔案查詢的萬用字元(wildcard),也就是*和?。如果你想查詢某個目錄下的所有的word文件的話,你會搜尋*.doc。(如下圖)在這裡,*會被解釋成任意的字串。和萬用字元類似,正規表示式也是用來進行文字匹配的工具,只不過比起萬用字元,它能更精確地描述你的需求——當然,代價就是更複雜——比如你可以編寫乙個正規表示式,用來查詢所有以0開頭,後面跟著2-3個數字,然後是乙個連字型大小「-」,最後是7或8位數字的字串(像010-12345678或0376-7654321)。

學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。

假設你在一篇英文**裡查詢hi,你可以使用正規表示式hi。

這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串:由兩個字元組成,前乙個字元是h,後乙個是i。通常,處理正規表示式的工具會提供乙個忽略大小寫的選項,如果選中了這個選項,它可以匹配hi,hi,hi,hi這四種情況中的任意一種。

不幸的是,很多單詞裡包含hi這兩個連續的字元,比如him,history,high等等。用hi來查詢的話,這裡邊的hi也會被找出來。如果要精確地查詢hi這個單詞的話,我們應該使用\bhi\b。

\b是正規表示式規定的乙個特殊**(好吧,某些人叫它元字元,metacharacter),代表著單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b並不匹配這些單詞分隔字元中的任何乙個,它只匹配乙個位置

假如你要找的是hi後面不遠處跟著乙個lucy,你應該用\bhi\b.*\blucy\b。

這裡,.是另乙個元字元,匹配除了換行符以外的任意字元。*同樣是元字元,不過它代表的不是字元,也不是位置,而是數量——它指定*前邊的內容可以連續重複使用任意次以使整個表示式得到匹配。因此,.*連在一起就意味著任意數量的不包含換行的字元。現在\bhi\b.*\blucy\b的意思就很明顯了:先是乙個單詞hi,然後是任意個任意字元(但不能是換行),最後是lucy這個單詞。

正規表示式 正規表示式函式 筆記

筆記直接使用pycharm製作,需要原始檔請私聊。正規表示式函式 1.match 2.search 3.全域性匹配函式 全域性匹配 re.compile 正規表示式 findall 資料 import re string poythonydasadcasa pat2 p.y 懶惰模式執行 較精準 r...

正規表示式筆記

不同的語系編碼的順序不一樣 lang c 0 1 2 3 a b c d z a b c d z lang zh cn 0 1 2 3 4 a a b b c c z z 使用正規表示式時,需要留意環境的語系是什麼,否則會有不同的結果 alnum 英文大小寫字元及數字 0 9 a z a z alp...

正規表示式筆記

d 0 9中的任意乙個數字 w a z,a z,0 9,中的任意乙個,即字母數字下劃線 s 空格,製表符,換頁符等空白字元的其中任意乙個 小數點可以匹配換行符 n 以外的任意乙個字元 匹配某範圍內的任意乙個字元 ab9 匹配 a b 9 中的任意乙個 abc 匹配abc之外的任意乙個字元 a g 匹...