1. 程式人生 > >python的正則表示式re模板

python的正則表示式re模板

一,什麼是re
Python 的 re 模組(Regular Expression 正則表示式)提供各種正則表示式的匹配操作,使用這一內嵌於 Python 的語言工具,儘管不能滿足所有複雜的匹配情況,但足夠在絕大多數情況下能夠有效地實現對複雜字串的分析並提取出相關資訊。Python 會將正則表示式轉化為位元組碼,利用 C 語言的匹配引擎進行深度優先的匹配。
二,正則表示式語法
如一下圖表所示
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
一些特殊的用法如下
這裡寫圖片描述
這裡寫圖片描述

三,re的主要功能
Python 的 re 正則表示式模組定義了一系列函式,常量以及異常;同時,正則表示式被編譯成‘ RegexObject ’例項,本身可以為不同的操作提供方法。接下來簡要介紹一下這些函式的功能和用法。
1,re中所包含的屬性

>>> import re
>>> dir(re)
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache'
, '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']

2,主要屬性的解釋
2.1 compile函式
python help中的解釋

Help on function compile in module re:
compile(pattern, flags=0)
    Compile a regular expression pattern, returning a pattern object.

re.compile(pattern[, flags])
把正則表示式的模式和標識轉化成正則表示式物件,供 match() 和 search() 這兩個函式使用。
flags 的取值如下:

re.I 忽略大小寫
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
re.M 多行模式
re.S 即為’ . ’並且包括換行符在內的任意字元(’ . ’不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字元屬性資料庫
re.X 為了增加可讀性,忽略空格和’ # ’後面的註釋

案例:

>>> pattern ='ab*\d?'
>>> my_pattern = re.compile(pattern,re.S)

2.2,search函式
python help解釋

Help on function search in module re:
search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern, returning a match object, or None if no match was found.

通過串尋找一個匹配的模式,返回一個匹配的物件,如果沒有找到匹配
就返回None
案例:

>>> re.search(my_pattern,'ab23cd')
<_sre.SRE_Match object at 0xb714e9f8>
>>> re.search(my_pattern,'23cd')
>>> >>> m=re.search(my_pattern,'ab23cd')
>>> m.group(0)
'ab2'
>>> mm=re.search(my_pattern,'23cd')
>>> mm.group(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

2.3,match
python help中的解釋

Help on function match in module re:
match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning a match object, or None if no match was found.

match() 函式只在字串的開始位置嘗試匹配正則表示式,也就是隻報告從位置 0 開始的匹配情況,而 search() 函式是掃描整個字串來查詢匹配。如果想要搜尋整個字串來尋找匹配,應當用 search()。
案例:

>>> m = re.match(r"ni*",'niiiiiiiihsomrf')
>>> m.group(0)
'niiiiiiii'
>>> m = re.match(r"ni*?",'niiiiiiiisomrf')
>>> m.group(0)
'n'
>>> 

2.4,spilt
python help的解釋
Help on function split in module re:

split(pattern, string, maxsplit=0, flags=0)
    Split the source string by the occurrences of the pattern, returning a list containing the resulting substrings.

在匹配正則表示式處分割源串並且把分割的串以list形式返回
案例:

>>> re.split(r'a*\d+','a333defa32ade3a24')
['', 'def', 'ade', '', '']

2.5,findall
python help解釋

Help on function findall in module re:
findall(pattern, string, flags=0)
    Return a list of all non-overlapping matches in the string.  
    If one or more groups are present in the pattern, return a
    list of groups; this will be a list of tuples if the pattern
    has more than one group.
    Empty matches are included in the result.

在字串中找到正則表示式所匹配的所有子串,並組成一個列表返回
案例:

>>> re.findall(r'^ab+/w\d*?','ab12frdabd12ab23adl3')
[]
>>> re.findall(r'^ab+\d*?','ab12frdabd12ab23adl3')
['ab']
>>> re.findall(r'^ab\d*?','ab12frdabd12ab23adl3')
['ab']
>>> re.findall(r'ab\d*?','ab12frdabd12ab23adl3')
['ab', 'ab', 'ab']
>>> re.findall(r'ab\d*','ab12frdabd12ab23adl3')
['ab12', 'ab', 'ab23']

2.6 finditer
python help的解釋

Help on function finditer in module re:
finditer(pattern, string, flags=0)
    Return an iterator over all non-overlapping matches in the
    string.  For each match, the iterator returns a match object.
    Empty matches are included in the result.

和 findall 類似,在字串中找到正則表示式所匹配的所有子串,並組成一個迭代器返回。

2.7 sub
python help的解釋

Help on function sub in module re:
sub(pattern, repl, string, count=0, flags=0)
    Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is  a callable, it's passed the match object and must return a replacement string to be used.

在字串 string 中找到匹配正則表示式 pattern 的所有子串,用另一個字串 repl 進行替換。如果沒有找到匹配 pattern 的串,則返回未被修改的 string。Repl 既可以是字串也可以是一個函式。

2.8 subn 和sub 功能相似