python正则表达式实例教程_Python正则表达式经典入门教程
本文實例總結了Python正則表達式基本用法。分享給大家供大家參考,具體如下:
正則表達式在平時做文本處理(爬蟲程序去解析html中的字段,在分析log文件的時候需要抓取一些關鍵數據)的時候經常會用到。一般我們會使用到Python的re庫。如果正則表達式自己代碼中反復被用到的時候,我們可以將這個正則表達式使用re.compile函數轉換成一個object方便調用。
match
將輸入的字符串從第一個字符開始匹配,如果不匹配將會直接返回空。
search
和match不同,search能自由的在字符串中任一開始位置開始匹配,直到匹配上了。
re中的選項
通常在flag里面可以設置.
re.I 忽略掉大小寫
re.L 讓\w,\W,\b,\B,\s和\S做本地化識別
re.M 當匹配的時候支持多行匹配.
re.DEBUG 顯示正則表達式的調試信息
re.S 讓.號匹配本行的全部字符。
sub 替換
import re
phone='188-88-88 # this is my phone number'
num = re.sub(r'#.*$','',phone)
# num ==188-88-88
num = re.sub(r'\D','',phone)
# num = 1888888
還能使用這個來做代碼的轉義,有點像在 sublime text里面使用的查找替換。比如說我需要將C語言里面的宏定義轉換成lua里面的變量定義
import re
print( re.sub( r'#define\s+([a-zA-Z_]+)\s+([a-zA-Z_0-9]+)', r'_G.\1 = \2', '#define MAX_RECV_SIZE 100' ) )
#_G.MAX_RECV_SIZE = 100
subn函數類似,只是能定制替換的次數。
findall
將匹配到的內容返回成一個數組,這個應該是比較常用的方法。
print( re.findall( '\d+', '66,88,88,777' ) )
# ['66', '88', '88', '777']
finditer
匹配的內容以迭代器的方式返回,我們可以對這個做循環,返回的時候MatchObject
for num in re.finditer( '\d+', '66,88,88,777' ):
print num.group()
'''
66
88
88
777
'''
split
re.split(pattern, string, maxsplit=0, flags=0)
>>> re.split(',', 'Words, words, words.')
['Words', ' words', ' words.']
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
大寫的\W表示了非字串,這個在語法里面可以查到。如果加了括號,將不會省略掉匹配到的split的字串。最后這個在數組中作為字串分隔符的,.都被保留在數組中了。
escape
這個函數是一個輔助函數,當大量編寫正則表達式的時候,可能我們固定的一些字串中包含了正則的保留字串,但是我們不需要讓程序當它是re表達式的時候,可以使用這個函數將字串做轉換。
re.escape('1234@gmail.com')
# result
1234\\@gmai\\.com
備注語法:
模式
描述
^
匹配字符串的開頭
$
匹配字符串的末尾。
.
匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。
[…]
用來表示一組字符,單獨列出:[amk] 匹配 ‘a','m'或'k'
[^…]
不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*
匹配0個或多個的表達式。
re+
匹配1個或多個的表達式。
re?
匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式re{ n}
re{ n,}
精確匹配n個前面表達式。
re{ n, m}
匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式a
(re)
G匹配括號內的表達式,也表示一個組
(?imx)
正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。
(?-imx)
正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。
(?: re)
類似 (…), 但是不表示一個組
(?imx: re)
在括號中使用i, m, 或 x 可選標志
(?-imx: re)
在括號中不使用i, m, 或 x 可選標志
(?#…)
注釋.
(?= re)
前向肯定界定符。如果所含正則表達式,以 … 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re)
前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功
(?> re)
匹配的獨立模式,省去回溯。
\w
匹配字母數字
\W
匹配非字母數字
\s
匹配任意空白字符,等價于 [\t\n\r\f].
\S
匹配任意非空字符
\d
匹配任意數字,等價于 [0-9].
\D
匹配任意非數字
\A
匹配字符串開始
\Z
匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。c
\z
匹配字符串結束
\G
匹配最后匹配完成的位置。
\b
匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b' 可以匹配”never” 中的 ‘er',但不能匹配 “verb” 中的 ‘er'。
\B
匹配非單詞邊界。'er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'。
\n, \t, 等.
匹配一個換行符。匹配一個制表符。等
\1…\9
匹配第n個分組的子表達式。
\10
匹配第n個分組的子表達式,如果它經匹配。否則指的是八進制字符碼的表達式。
PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:
希望本文所述對大家Python程序設計有所幫助。
總結
以上是生活随笔為你收集整理的python正则表达式实例教程_Python正则表达式经典入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python插件开发怎么扩展主程序_py
- 下一篇: pb 应用 迁移 linux_功能化生物