PYTHON--re模塊與正則表達式

正則表達式

1. 通配符

點號可以匹配除了換行符外的任何單個字符。
特殊字符要轉義
前面加\

2. 字符集

用中括號括住字符串來創建字符集。字符集能匹配它包括的所有字符。只能匹配一個字符。

'[^abc]'     # 可以匹配除了abc之外的字符

3. 選擇符和子模式

'p(ython|erl)'  # 匹配兩個字符串

4. 可選項和重複子模式

在子模式後面加上問號,就變成可選項。

r'(http://)?(www\.)?python\.org'

能匹配到下列字符串而沒有其他模式:

'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'
  • 可選子模式互相獨立。
    每個可選子模式都用圓括號括起來。
    使用原始字符串減少反斜線的數量。
    對點好做了轉義,防止它成爲通配符使用。

  • 以下運算符可以允許子模式重複多次:

(pattern)*:重複零次以上
(pattern){m,n}:重複m-n次
(pattern)+:重複一次以上
'^ht+p'只在字符串開頭而不是其他位置匹配
$字符串結尾用$標
  • 常見正則:
    \W 匹配任意不是字母,數字,下劃線,漢字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非數字的字符
    \B 匹配不是單詞開頭或結束的位置
    [^x] 匹配除了x以外的任意字符

re模塊內容

1.compile

re.compile(pattern[,flags])
將含正則表達式的字符串的轉換爲模式對象。

第二個參數flag是匹配模式,取值可以使用按位或運算符’|’表示同時生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile(‘pattern’, re.I | re.M)與re.compile(‘(?im)pattern’)是等價的。
可選值有:

re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
M(MULTILINE): 多行模式,改變’^’和’$’的行爲
S(DOTALL): 點任意匹配模式,改變’.’的行爲
L(LOCALE): 使預定字符類 \w \W \b \B \s \S 取決於當前區域設定
U(UNICODE): 使預定字符類 \w \W \b \B \s \S \d \D 取決於unicode定義的字符屬性
X(VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字符,並可以加入註釋。以下兩個正則表達式是等價的:

2.search

search(pattern,string[,flags])
在給定字符串中尋找第一個匹配的子串,一旦給定,就返回MatchObject(真值),否則返回false。函數在字符串內查找模式,直到找到第一個就退出,查找不到返回None,其參數和re.match一致。而與match的區別在於,match只是匹配字符串的開始,而search匹配整個字符串

3.match

match(pattern,string[,flags])
re.match從字符串的開始匹配一個模式,第一個參數是正則表達式,第二個字符串是要匹配的字符串,第三個參數是標誌位,缺省爲0;如果可以查找到則返回一個match對象,否則返回None。

>>> import re
>>> re.match("c","cdkfje")
<_sre.SRE_Match object at 0x00000000027D2D30>
>>> re.search("c","abcdef")
<_sre.SRE_Match object at 0x00000000027D2B28>

4.findall

re.findall(pattern,string)
可以獲取所有匹配的字符串,並且以list形式返回。

5.split

re.split(pattern,string[,count=0])
會根據模式匹配分割字符串

6.escape

escape(string)
字符串的正則式:前面加r
例如查找標點符號:

>>> text = '"hm...err -- are you suere ? "he said ,sountg ing.'
>>> import re
>>> pat = r'[.?/,"]+'
>>> re.findall(pat,text)
['"', '...', '?', '"', ',', '.']

7.分組

re模塊中能夠匹配時,會返回MatchObject對象。他們還包含匹配了子字符串哪部分的信息。稱爲group。
簡單說,group就是圓括號內的子模式。group的序號取決於它左側的括號數。小組是從左向右計數的,從1開始。組可以被嵌套。計數的數值可以能過從左到右計算打開的括號數來確定。

>>>p=re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
 'abcd'
>>> m.group(1)
 'abc'
>>> m.group(2)
 'b'
  • 對MatchObject類的方法有:
    group ([序號]) 獲取給定組的匹配項
    start()默認0是整個組,從1開始索引
    end()
    span()返回一個組的開始和結束位置

8.sub

作爲替換組號和函數
re.sub()
sub(replacement, string[, count = 0])
對於輸入的一個字符串,利用正則表達式(的強大的字符串處理功能),去實現(相對複雜的)字符串替換處理,然後返回被替換後的字符串

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