Python標準庫--re模塊
阿新 • • 發佈:2017-06-02
spa 編程 斜杠 不能 當前 對象 需要 sum pri
re:正則表達式
__all__ = [ "match", "fullmatch", "search", "sub", "subn", "split", "findall", "finditer", "compile", "purge", "template", "escape", "error", "A", "I", "L", "M", "S", "X", "U", "ASCII", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE", "UNICODE", ]
一些常量
I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE #ignore case # 使匹配對大小寫不敏感 L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale # 影響 "w, "W, "b, 和 "B,這取決於當前的本地化設置。 locales 是 C 語言庫中的一項功能,是用來為需要考慮不同語言的編程提供幫助的。 # 舉個例子,如果你正在處理法文文本,你想用 "w+ 來匹配文字,但 "w 只匹配字符類 [A-Za-z];它並不能匹配 "é" 或 "?"。 如果你的系統配置適當且本地化設置為法語,那麽內部的 C 函數將告訴程序 "é" 也應該被認為是一個字母。# 當在編譯正則表達式時使用 LOCALE 標誌會得到用這些 C 函數來處理 "w 後的編譯對象;這會更慢,但也會象你希望的那樣可以用 "w+ 來匹配法文文本。 M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline # 使用 "^" 只匹配字符串的開始,而 $ 則只匹配字符串的結尾和直接在換行前(如果有的話)的字符串結尾。 # 當本標誌指定後,"^" 匹配字符串的開始和字符串中每行的開始。同樣的, $ 元字符匹配字符串結尾和字符串中每行的結尾(直接在每個換行之前)。 S = DOTALL = sre_compile.SRE_FLAG_DOTALL #make dot match newline # 使 "." 特殊字符完全匹配任何字符,包括換行;沒有這個標誌, "." 匹配除了換行外的任何字符。 X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments # 當該標誌被指定時,在 RE 字符串中的空白符被忽略,除非該空白符在字符類中或在反斜杠之後;這可以讓你更清晰地組織和縮進 RE。它也可以允許你將註釋寫入 RE,這些註釋會被引擎忽略;註釋用 "#"號 來標識,不過該符號不能在字符串或反斜杠之後。
函數
match() 從頭匹配, 沒有返回空
search() 字符串中查找,返回第一個
pattern = ‘this‘ text = ‘Does this text match this pattern?‘ match = re.match(pattern, text) search = re.search(pattern, text) s = search.start() e = search.end() print(match) print(search.re.pattern) print(search.string) print(s) print(e) print(text[s:e]) """ None this Does this text match this pattern? 5 9 this """
complie()
regex = re.compile(pattern) print(regex.match(text)) print(regex.search(text)) """ None <_sre.SRE_Match object; span=(5, 9), match=‘this‘> """
findall() 與finditer()
叠代器生成Match實例, 通過group() start() end() 獲取信息
text = ‘abbaaabbbbaaaabbbbbaaa‘ pattern = ‘ab‘ print(re.findall(pattern, text)) ab = re.finditer(pattern, text) for match in ab: print(match) for match in ab: print(str(match.start()) + ‘->‘ + str(match.end()), end=‘=‘) print(match.group()) """ [‘ab‘, ‘ab‘, ‘ab‘] <_sre.SRE_Match object; span=(0, 2), match=‘ab‘> <_sre.SRE_Match object; span=(5, 7), match=‘ab‘> <_sre.SRE_Match object; span=(13, 15), match=‘ab‘> 0->2=ab 5->7=ab 13->15=ab """
groups() 所有匹配字符串
group() 整體匹配字符串
group(0) group(1) 按組匹配的字符串
sub() 與 subn()
subn() 返回元祖,包含替換次數
bold = re.compile(r‘\*{2}(.*?)\*{2}‘) text = "Make this **bold**. This **too**." print(text) print(bold.sub(r‘<b>\1</b>‘, text, count=1)) print(bold.subn(r‘<b>\1</b>‘, text)) """ Make this **bold**. This **too**. Make this <b>bold</b>. This **too**. (‘Make this <b>bold</b>. This **too**.‘, 1) """
Python標準庫--re模塊