Python自帶的re
模塊提供了對正則表達式的支持消返。
1.Pythonre
模塊中的一些元字符及其表示的意義
幾點說明:
(1)python正則匹配模式默認采用貪婪匹配载弄,即匹配越多越好。
In [17]: import re
In [18]: s='abbbbc'
In [20]: re.match('ab*',s)
Out[20]: <_sre.SRE_Match object; span=(0, 5), match='abbbb'>
In [21]: re.match('ab?',s)
Out[21]: <_sre.SRE_Match object; span=(0, 2), match='ab'>
In [22]: re.match('ab*?',s) #特殊例子
Out[22]: <_sre.SRE_Match object; span=(0, 1), match='a'>
(2)轉(zhuǎn)義字符''用來關(guān)閉元字符的特殊意義撵颊,而在python正則表達式中r'rawstring'
同樣可以關(guān)閉元字符特殊意義宇攻,使其僅作為一個字符。
In [29]: print('\\')
\
In [30]: print(r'\\')
\\
In [31]: print('\\d')
\d
In [32]: print(r'\d')
\d
2.Python re
模塊常用方法
re.complile(pattern) #編寫正則匹配模式
re.match(pattern, text) # pattern為正則表達模式倡勇,text為要查找的字符串逞刷,會返回一個match對象,從頭匹配妻熊,開頭沒有則返回None,
可用re.match(pattern, text).group()方法取出匹配到的對象
re.search(pattern, text) # 只要在text中找到了pattern就返回夸浅,只返回第一個匹配到的pattern的位置
re.findall(pattern, text) # 將能匹配到的以list的方式全部返回
re.finditer() # 返回一個包含了所有的匹配對象的迭代器
# 迭代器中的每一個迭代對象都有span(),start(),end()方法,可以返回匹配結(jié)果的位置
re.split(pattern, text) # 按照pattern匹配扔役,并且以匹配到的字符為分隔符切割text帆喇,返回一個切割后的list
re.sub(pattern, s, text) # 替換,將pattern匹配到的字符替換為s
3. 匹配對象的操作方法
group() 返回正則表達式匹配到的字符串
start() 返回匹配的起始位置
end() 返回匹配的結(jié)束位置
span() 返回一個包含匹配的起始位置和結(jié)束位置的元組(start, end)
4. 重復匹配一個字符串多次
string = 'asdasdasdasdasdasdasddasfdhgasghsd'
print(re.findall(r'((?:asd)+)', string))
# 解釋下
# (?:asd)+ 是正則的一種不存分組的語法, 它具有2個用途, 將`asd`看成一個樣式整體, 所以當我們用+時, 就能代表多個asd
# () 最外層的括號就是將匹配的結(jié)果存入分組, 與上面不同的就是, 少了`?:`, 因為沒有這個, 所以它能存到分組
# 所以整體的結(jié)果就是: 將多個asd匹配, 并存入分組, 然后在re.findall的結(jié)果就能看到了