1. 程式人生 > >Python標準庫--re模塊

Python標準庫--re模塊

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模塊