最近在學(xué)習(xí)使用Python來(lái)寫(xiě)爬蟲(chóng),既然是學(xué)習(xí)爬蟲(chóng),那肯定少不了篩選數(shù)據(jù)的神器-正則表達(dá)式,當(dāng)然了強(qiáng)大的Python中也有正則表達(dá)式(正則表達(dá)式30分鐘入門(mén)教程)的模塊,那就是re
,下面就來(lái)了解一些我們常用的正則方法:
re.match
- re.match 模式:從字符串的開(kāi)始匹配一個(gè)滿足對(duì)象, 例如匹配第一個(gè)單詞
import re
str = "my name is BZ, what's your name ?"
value = re.match(r"(\w+)\s", text)
if value:
print(m.group(0))
else:
print('not match')
- **re.match的函數(shù)為:
re.match(pattern,string,flags)
** - pattern: 為正則表達(dá)式如
(\w+)\s
,如果匹配成功就返回小括號(hào)內(nèi)匹配的數(shù)據(jù) - **string: 要匹配的字符串 **
- flags: 用來(lái)控制正則表達(dá)式的匹配規(guī)則,如:是否區(qū)分大小寫(xiě)
re.search
- re.search 模式:在字符串中查找匹配的對(duì)象,找到第一個(gè)后返回,如果沒(méi)有返回None
- re.search的函數(shù)為:
re.search(pattern,string,flags)
- 相比re.match只匹配開(kāi)始而言,search會(huì)匹配所有,直到找到一個(gè)
re.sub
- re.sub 模式:替換掉字符中的匹配項(xiàng)
- re.sub的函數(shù)為:
re.sub(pattern,repl,string,count)
- pattern: 要替換的正則表達(dá)式
- repl: 替換后的字符串
- string: 被匹配的字符串
- count: 替換的次數(shù),如果為零,默認(rèn)替換所有匹配項(xiàng)
re.split
- re.split模式:分割字符,例如使用
re.split(r',',text)
將帶,
的字符串分割為數(shù)組
re.findall
- re.findall 模式:獲取字符串中所有匹配的對(duì)象
- 相比
re.search
而言會(huì)搜尋所有的可匹配對(duì)象
re.compile
- re.compile模式:可以將一個(gè)正則表達(dá)式變成一個(gè)正則表達(dá)式對(duì)象,你可以使用它來(lái)匹配以上的各種規(guī)則,而不用重寫(xiě)正則表達(dá)式,例如:
import re
text = "my name is BZ, what's your name ?"
regex = re.compile(r'\w*BZ\w*')
print regex.findall(text) #查找所有包含'BZ'的單詞
print regex.sub(lambda m: '[' + m.group(0) + ']', text) #將字符串中含有`BZ`的單詞用`[]`括起來(lái)瞧柔。
flag的幾種不同意義:
re.I(re.IGNORECASE)
: 忽略大小寫(xiě)(括號(hào)內(nèi)是完整寫(xiě)法诗芜,下同)M(MULTILINE)
: 多行模式鸟召,改變'^'和'$'的行為S(DOTALL)
: 點(diǎn)任意匹配模式,改變'.'的行為L(LOCALE)
: 使預(yù)定字符類(lèi) \w \W \b \B \s \S 取決于當(dāng)前區(qū)域設(shè)定U(UNICODE)
: 使預(yù)定字符類(lèi) \w \W \b \B \s \S \d \D 取決于unicode定義的字符屬性X(VERBOSE)
: 詳細(xì)模式京办。這個(gè)模式下正則表達(dá)式可以是多行胳泉,忽略空白字符,并可以加入注釋.