學習Python2(正則表達式)

感謝crossin大神!

# 調用範例
import re
text = "Hi, I am Shirley Hilton. I am his wife."
m = re.findall(r"hi", text) #把所有符合要求的存到列表中
if m:
    print m
else:
    print 'not match'

#貪婪匹配
m = re.findall(r"I.*e", text)
# 結果:['I am Shirley Hilton. I am his wife']
#懶惰匹配
m = re.findall(r"I.*?e", text)
# 結果: ['I am Shirle', 'I am his wife']

常用元字符

\b

在正則表達式中表示單詞的開頭或結尾,空格、標點、換行 都算是單詞的分割。而“\b”自身又不會匹配任何字符,它代表的只是一個位置。所以單詞前、後的空格標點之類不會出現在結果裏。

[]

表示滿足括號中任一字符。比如“[hi]”,它就不是匹配“hi“,而是匹配”h”或者”i”。
連續的字符,有一種簡化的寫法:[0-9]。類似的還有[a-zA-Z]的用法。

r

r”hi”。這裏字符串前面加了 r,是 raw 的意思,它表示對字符串不進行轉義。

.

在正則表達式中表示除換行符以外的任意字符。在上節課提供的那段例子文本中: Hi, I am Shirley Hilton. I am his wife.如果我們用“i.”去匹配,就會得到 [‘i,’, ‘ir’, ‘il’, ‘is’, ‘if’]。

\S

與“.”類似的一個符號是“\S”,它表示不是空白符的任意字符。注意是大寫字符 S。

?

表示任意一個字符。

*

表示任意數量(包括0個)連續字符,這種被稱爲通配符。

在正則表達式中, 任意字符是用“.”表示,而“*”則不是表示字符,而是表示數量。

+

表示任意數量(大於0個)連續字符,這種被稱爲通配符。

{}

如果要限定長度,就用{}代替+,大括號裏寫上你想要的長度。比如 11 位的數字: \d{11}。

\d

任意一個數字。

其它


  1. 我們已經瞭解了正則表達式中的一些特殊符號,如\b、\d、.、\S 等等。這些具 有特殊意義的專用字符被稱作“元字符”。常用的元字符還有:
    \w - 匹配字母或數字或下劃線或漢字(我試驗下了,發現 3.x 版本可以匹配漢字,但 2.x 版本不可以)
    \s - 匹配任意的空白符
    ^ - 匹配字符串的開始
    $ - 匹配字符串的結束

  2. \S 其實就是\s 的反義,任意不是空白符的字符。同理,還有:
    \W - 匹配任意不是字母,數字,下劃線,漢字的字符 \D - 匹配任意非數字的字符
    \B - 匹配不是單詞開頭或結束的位置
    [a]的反義是[^a],表示除 a 以外的任意字符。[^abcd]就是除 abcd 以外的任意 字符。

  3. 之前我們用過*、+、{}來表示字符的重複。其他重複的方式還有:
    ? - 重複零次或一次
    {n,} - 重複 n 次或更多次 {n,m} - 重複n到m次
    正則表達式不只是用來從一大段文字中抓取信息,很多時候也被用來判斷輸入的 文本是否符合規範,或進行分類。來點例子看看:

^\w{4,12}$

這個表示一段 4 到 12 位的字符,包括字母或數字或下劃線或漢字,可以用來作爲用戶註冊時檢測用戶名的規則。(但漢字在 python2.x 裏面可能會有問題)

\d{15,18}

表示 15 到 18 位的數字,可以用來檢測身份證號碼

^1\d*[x]?

以 1 開頭的一串數字,數字結尾有字母 x,也可以沒有。有的話就帶上 x。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章