1. 程式人生 > >python re.compile()和findall()

python re.compile()和findall()

compile(pattern[,flags] ) 根據包含正則表示式的字串建立模式物件。

>>>help(re.compile)
compile(pattern, flags=0)
    Compile a regular expression pattern, returning a pattern object.

通過help可以看到compile方法的介紹,返回一個pattern物件,但是卻沒有對第二個引數flags進行介紹。第二個引數flags是匹配模式,可以使用按位或’|’表示同時生效,也可以在正則表示式字串中指定。pattern物件是不能直接例項化的,只能通過compile方法得到。匹配模式有:

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

例如:

pattern1 = re.compile('abc', re.I) #忽略大小寫
  •  

findall用法示例:

>>> import re  
>>> s = "adfad asdfasdf asdfas asdfawef asd adsfas "  

>>> reObj1 = re.compile('((\w+)\s+\w+)')  
>>> reObj1.findall(s)  
[('adfad asdfasdf', 'adfad'), ('asdfas asdfawef', 'asdfas'), ('asd adsfas', 'asd')]  

>>> reObj2 = re.compile('(\w+)\s+\w+')  
>>> reObj2.findall(s)  
['adfad', 'asdfas', 'asd']  

>>> reObj3 = re.compile('\w+\s+\w+')  
>>> reObj3.findall(s)  
['adfad asdfasdf', 'asdfas asdfawef', 'asd adsfas']  
  1. 當給出的正則表示式中帶有多個括號時,列表的元素為多個字串組成的tuple,tuple中字串個數與括號對數相同,字串內容與每個括號內的正則表示式相對應,並且排放順序是按括號出現的順序。

  2. 當給出的正則表示式中帶有一個括號時,列表的元素為字串,此字串的內容與括號中的正則表示式相對應(不是整個正則表示式的匹配內容)。

  3. 當給出的正則表示式中不帶括號時,列表的元素為字串,此字串為整個正則表示式匹配的內容。