1. 正規表示式
正規表示式:一種匹配文字中的字串行的字元模式。在很多文字編輯器或其他工具裡,正規表示式通常被用來檢索或替換那些符合某種模式的文字內容。許多程式語言都支援利用正規表示式進行字串操作。
乙個正規表示式就是由普通字元(例如字元『a』
到『z』)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。
1.1 元字元
字元描述
例項\d
匹配任意的數字
\d\d可以匹配12,但不匹配a1或1a等
\d匹配任意的非數字字元
\d\d匹配a@,不匹配12
\w匹配單詞字元(包括字母、數字、下劃線和漢字)
\w匹配任意的非單詞字元(包括字母、數字、下劃線和漢字)
\w匹配@等,不匹配a
\s匹配任何空白字元,包括空格、製表符、換行符等
\s匹配任意非空白字元
匹配除換行符之外的任意字元
匹配行的開始位置
"^the":表示所有以"the"開始的字串("there","the cat"等)
匹配行的結束位置
"of despair$":表示以"of despair"結尾的字串
\b匹配單詞的開始或結束位置
"\bcat"將匹配 "cat cat cat"首尾的"cat",中間的"cat"不會被匹配上
\b\b的補集
"\bcat"將匹配 "cat cat cat"中間的"cat"
2. 字元類
在正規表示式中,元字元通常一次只能匹配乙個位置或字元集合中的乙個字元,但是如果要匹配的字元集合沒有與之相對應的元字元時,則需要自定義匹配的字元集合。此時可以使用字元類解決這個問題。字元類是乙個字元集合,如果該字元集合中的任何乙個字元被匹配,則它就會找到該匹配項。
字元類是正規表示式中的「迷你」語言,可以在方括號""
中定義。例如:
[012345]
匹配數字
0,1,2,3,4,5
中的任何乙個。
[jj]ack
匹配字串「
jack」
或者「jack」
。然而,正規表示式
[0123456789]
的書寫非常不方便。因此,正規表示式引入連線符「
-」定義字元的範圍。例如:正規表示式
[0-9]
等價於正規表示式
[0123456789]
。3. 限定符
正規表示式的元字元一次只能匹配乙個位置或乙個字元,如果要匹配零個、乙個或多個字元時,則需要使用限定符。限定符用於指定允許特定字元或字符集自身重複出現的次數。常用限定符的說明如表
2.11
所示。字元
描述例項
重複n次
'o' 不能匹配 "bob" 中的 'o',但是能匹配 "food" 中的兩個 。
至少重複n次
'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'。
重複至少n次,最多m次
"o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。
重複至少1次,等同
'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 。
重複至少0次,等同
zo* 能匹配 "z" 以及 "zoo"。 * 等價於。
當該字元緊跟在任何乙個其他限定符 (*, +, ?, , , ) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。
對於字串"oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
4. 轉義字元
正規表示式定義了一些特殊的元字元,如^、
$、.等。由於這些字元在正規表示式中被解釋成其他的特定的意義,如果需要匹配這些字元,則需要使用轉義字元來解決這一問題。轉義字元為「
\」(反斜槓
),它可以取消這些字元(如
^、$、
.等)在表示式中具有的特殊意義,轉義字元說明及實例如表
2.12。字元
描述例項
有些字元被用來表示特殊的含義,但是要匹配其本身時就需要用轉義字元。
"\\"匹配"\"
"\."匹配"."
"\*"匹配"*"
"\+"匹配"+"
"\unnnn"匹配乙個4位16進製制數指定的unicode
5. 分組、「或」、以及反向引用
前面講到怎麼重複單個字元(直接在字元後面加上限定符就行了);但如果想要重複乙個字串就應該使用分組。
分組又稱為子表示式,即把乙個正規表示式的全部或部分分成乙個或多個組。其中,分組使用括號「
()」表示。分組之後,可以將括號「
()」之中的表示式看成乙個整體來處理,然後再指定這個子表示式的重複次數。例如:「
(\d\.)\d」
是乙個簡單的
ip位址匹配表示式。
「(\d\.)」
匹配三位數字加上乙個英文句號重複
3次,「
\d」匹配1到
3位的數字。
「或」使用字元「
|」來表示。如果某乙個字串匹配了正規表示式中的字元「
|」的左邊或者右邊的規則,那麼該字串也匹配了該正規表示式。例如:「
0\d-\d|0\d-\d|0\d-\d」
匹配當前國內部分地區的
3種固定**號碼:一種是號碼的前
3位為區號,後
8位為本地號碼;另一種是號碼的前四位為區號,後
7位為本地號碼;最後一種是號碼的前
4位為區號,後
8位為本地號碼。其中,區號和本地號碼都使用連線符號「
-」進行連線。
反向引用:當乙個正規表示式被分組之後,每乙個組將自動被賦予乙個組號,該組號可以代表該組的表示式。其中,組號的編制規則為:從左到右,以分組的左括號「
(」為標誌,第乙個分組組號為
1,第二個分組的組號為
2,以此類推。反向引用提供了查詢重複字元組的方便方法。它可被認為是再次匹配同乙個字串的快捷指令。反向引用可以使用數字命名的組號,語法為:
\number
,也可以使用指定命名的組號,語法為:\k<
name
>。例如:表示式「
('|")(.*?)(\1)」
在匹配「
'hello',"world"」
時,首先匹配到的內容是:「
'hello'」
。再次匹配下乙個時,可以匹配到「
"world"」
。2. regex tester用來測試正規表示式
regex tester是乙個簡單的用來測試正規表示式的工具,是開源的。
乙個正規表示式的測試工具
寫這個的初衷是因為專案中要為struts的html標籤加上styleid屬性,其屬性值一般與property屬性值相同。由於頁面很多手工修改很可能會出差錯工作量也很大,雖然這項工作不是由我來做,但是我建議可以用正規表示式替換來做,可以簡單很多。寫正規表示式的任何就落在我的頭上了,這個正規表示式不會很...
正規表示式工具
python類庫31 正規表示式匹配例項 一 regex match tracer 1 不能是某些字元中之一 用來表示匹配多個字元之一。與相反,表示匹配與多個字元中的任乙個都不匹配。下圖中,h是第乙個與abcd都不匹配的字元。2 匹配多個字串中的2個或者乙個匹配2次 用來表示多個字串中的乙個。用來表...
正規表示式 ditto工具
一 正規表示式 1 正規表示式 是乙個查詢 搜尋 替換文字的一種格式語言。2 匯入re模組 import re 系統自帶模組,無需安裝 3 模式字串 模子 4 常用方法 4.1 match方法 match方法是從頭開始匹配的,如果匹配不上,那麼返回none 示例src str pwd 123456 ...