日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python之re模块 —— 正则表达式操作

發布時間:2025/4/14 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之re模块 —— 正则表达式操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python之re模塊 —— 正則表達式操作

?轉自:http://www.cnblogs.com/PythonHome/archive/2011/11/19/2255459.html

這個模塊提供了與 Perl 相似l的正則表達式匹配操作。Unicode字符串也同樣適用。

?

正則表達式使用反斜杠" \ "來代表特殊形式或用作轉義字符,這里跟Python的語法沖突,因此,Python用"?\\\\?"表示正則表達式中的" \ ",因為正則表達式中如果要匹配" \ ",需要用\來轉義,變成" \\ ",而Python語法中又需要對字符串中每一個\進行轉義,所以就變成了"?\\\\?"。

?

上面的寫法是不是覺得很麻煩,為了使正則表達式具有更好的可讀性,Python特別設計了原始字符串(raw string),需要提醒你的是,在寫文件路徑的時候就不要使用raw string了,這里存在陷阱。raw string就是用'r'作為字符串的前綴,如 r"\n":表示兩個字符"\"和"n",而不是換行符了。Python中寫正則表達式時推薦使用這種形式。

?

絕大多數正則表達式操作與 模塊級函數或RegexObject方法 一樣都能達到同樣的目的。而且不需要你一開始就編譯正則表達式對象,但是不能使用一些實用的微調參數。

?

1.正則表達式語法

??????? 為了節省篇幅,這里不再敘述了。

?

2.martch和search的區別

??????? Python提供了兩種不同的原始操作:match和search。match是從字符串的起點開始做匹配,而search(perl默認)是從字符串做任意匹配。

?

??????? 注意:當正則表達式是' ^ '開頭時,match與search是相同的。match只有當且僅當被匹配的字符串開頭就能匹配 或 從pos參數的位置開始就能匹配 時才會成功。如下:

>>> import re?
>>> re.match("c", "abcdef")?
>>> re.search("c","abcdef")?
<_sre.SRE_Match object at 0x00A9A988>

>>> re.match("c", "cabcdef")?
<_sre.SRE_Match object at 0x00A9AB80>

>>> re.search("c","cabcdef")?
<_sre.SRE_Match object at 0x00AF1720>

>>> patterm = re.compile("c")?
>>> patterm.match("abcdef")?
>>> patterm.match("abcdef",1)?
>>> patterm.match("abcdef",2)?
<_sre.SRE_Match object at 0x00A9AB80>

3.模塊內容

re.compile(pattern, flags=0)

?

編譯正則表達式,返回RegexObject對象,然后可以通過RegexObject對象調用match()和search()方法。

?

prog = re.compile(pattern)

result = prog.match(string)

result = re.match(pattern, string)

是等價的。

?

第一種方式能實現正則表達式的重用。

?

re.search(pattern, string, flags=0)

?

在字符串中查找,是否能匹配正則表達式。返回_sre.SRE_Match對象,如果不能匹配返回None。

?

re.match(pattern, string, flags=0)

?

字符串的開頭是否能匹配正則表達式。返回_sre.SRE_Match對象,如果不能匹配返回None。

?

re.split(pattern, string, maxsplit=0)

?

通過正則表達式將字符串分離。如果用括號將正則表達式括起來,那么匹配的字符串也會被列入到list中返回。maxsplit是分離的次數,maxsplit=1分離一次,默認為0,不限制次數。

>>> re.split('\W+', 'Words, words, words.')?
['Words', 'words', 'words', '']?
>>> re.split('(\W+)', 'Words, words, words.')?
['Words', ', ', 'words', ', ', 'words', '.', '']?
>>> re.split('\W+', 'Words, words, words.', 1)?
['Words', 'words, words.']?
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)

?

注意:我使用的Python是2.6,查看源代碼發現split()并沒有flags的參數,2.7才增加。這種問題我發現不止一次了,官方的文檔 跟 源碼不一致的現象,如果發現異常,應該去源碼中找找原因。

?

如果在字符串的開始或結尾就匹配,返回的list將會以空串開始或結尾。

>>> re.split('(\W+)', '...words, words...')?
['', '...', 'words', ', ', 'words', '...', '']

?

如果字符串不能匹配,將會返回整個字符串的list。

>>> re.split("a","bbb")?
['bbb']

?

re.findall(pattern, string, flags=0)

?

找到 RE 匹配的所有子串,并把它們作為一個列表返回。這個匹配是從左到右有序地返回。如果無匹配,返回空列表。

>>> re.findall("a","bcdef")?
[]

>>> re.findall(r"\d+","12a32bc43jf3")?
['12', '32', '43', '3']

?

re.finditer(pattern, string, flags=0)

?

找到 RE 匹配的所有子串,并把它們作為一個迭代器返回。這個匹配是從左到右有序地返回。如果無匹配,返回空列表。

>>> it = re.finditer(r"\d+","12a32bc43jf3")?
>>> for match in it:?
????????????? print match.group()

12?
32?
43?
3

?

re.sub(pattern, repl, string, count=0, flags=0)

?

找到 RE 匹配的所有子串,并將其用一個不同的字符串替換。可選參數 count 是模式匹配後替換的最大次數;count 必須是非負整數。缺省值是 0 表示替換所有的匹配。如果無匹配,字符串將會無改變地返回。

?

re.subn(pattern, repl, string, count=0, flags=0)

?

與re.sub方法作用一樣,但返回的是包含新字符串和替換執行次數的兩元組。

?

re.escape(string)

?

對字符串中的非字母數字進行轉義

?

re.purge()

?

清空緩存中的正則表達式

?

4.正則表達式對象

?

re.RegexObject

?

re.compile()返回RegexObject對象

?

re.MatchObject

?

group()返回被 RE 匹配的字符串

start()返回匹配開始的位置

end()返回匹配結束的位置

span()返回一個元組包含匹配 (開始,結束) 的位置

?

5.編譯標志

編譯標志讓你可以修改正則表達式的一些運行方式。在 re 模塊中標志可以使用兩個名字,一個是全名如 IGNORECASE,一個是縮寫,一字母形式如 I。(如果你熟悉 Perl 的模式修改,一字母形式使用同樣的字母;例如 re.VERBOSE的縮寫形式是 re.X。)多個標志可以通過按位 OR-ing 它們來指定。如 re.I | re.M 被設置成 I 和 M 標志:

I?
IGNORECASE

使匹配對大小寫不敏感;字符類和字符串匹配字母時忽略大小寫。舉個例子,[A-Z]也可以匹配小寫字母,Spam 可以匹配 "Spam", "spam", 或 "spAM"。這個小寫字母并不考慮當前位置。

L?
LOCALE

影響 "w, "W, "b, 和 "B,這取決于當前的本地化設置。

locales 是 C 語言庫中的一項功能,是用來為需要考慮不同語言的編程提供幫助的。舉個例子,如果你正在處理法文文本,你想用 "w+ 來匹配文字,但 "w 只匹配字符類 [A-Za-z];它并不能匹配 "é" 或 "?"。如果你的系統配置適當且本地化設置為法語,那么內部的 C 函數將告訴程序 "é" 也應該被認為是一個字母。當在編譯正則表達式時使用 LOCALE 標志會得到用這些 C 函數來處理 "w 後的編譯對象;這會更慢,但也會象你希望的那樣可以用 "w+ 來匹配法文文本。

M?
MULTILINE

(此時 ^ 和 $ 不會被解釋; 它們將在 4.1 節被介紹.)

使用 "^" 只匹配字符串的開始,而 $ 則只匹配字符串的結尾和直接在換行前(如果有的話)的字符串結尾。當本標志指定後, "^" 匹配字符串的開始和字符串中每行的開始。同樣的, $ 元字符匹配字符串結尾和字符串中每行的結尾(直接在每個換行之前)。

S?
DOTALL

使 "." 特殊字符完全匹配任何字符,包括換行;沒有這個標志, "." 匹配除了換行外的任何字符。

X?
VERBOSE

該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。當該標志被指定時,在 RE 字符串中的空白符被忽略,除非該空白符在字符類中或在反斜杠之後;這可以讓你更清晰地組織和縮進 RE。它也可以允許你將注釋寫入 RE,這些注釋會被引擎忽略;注釋用 "#"號 來標識,不過該符號不能在字符串或反斜杠之後。

?

最后:如果能用字符串的方法,就不要選擇正則表達式,因為字符串方法更簡單快速。

?

轉載于:https://www.cnblogs.com/DjangoBlog/p/3503844.html

總結

以上是生活随笔為你收集整理的Python之re模块 —— 正则表达式操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。