首頁>技術>

正則表示式是處理字串的強大工具,它有自己特定的語法結構, 有了它, 實現字串的檢索、替換、匹配驗證都不在話下。

當然, 對於爬蟲來說, 有了它, 從HTML裡面提取想要的資訊就非常方便了 。

1、基本字元介紹2、數量詞

舉例:

(1) a | b       		如abc|def,匹配abc或者def(2) (...)      		作為分組, 表示式為(\d{4})-(\d{2})-(\d{2}),則用於匹配2017-06-03,然後用分組編號1、2、3分別獲取年、月、日三個值(3) (?P<name>...) 和 (?P=name)		如表示式為(?P<Year>\d{4})(?P=Year)  則兩個括號裡面匹配的內容完全相同,為\d{4}(4) \number  		(?P<Year>\d{4})\1     \1表示此處和第一個分組匹配的內容完全相同,為\d{4}(5) (?:...)    		(?:\d+) | "abc"     表示匹配\d+ 或者"abc" ,但第一個括號不計入分組
3、邏輯分組

舉例:

(1) a | b       		如abc|def,匹配abc或者def(2) (...)      		作為分組, 表示式為(\d{4})-(\d{2})-(\d{2}),則用於匹配2017-06-03,然後用分組編號1、2、3分別獲取年、月、日三個值(3) (?P<name>...) 和 (?P=name)		如表示式為(?P<Year>\d{4})(?P=Year)  則兩個括號裡面匹配的內容完全相同,為\d{4}(4) \number  		(?P<Year>\d{4})\1     \1表示此處和第一個分組匹配的內容完全相同,為\d{4}(5) (?:...)    		(?:\d+) | "abc"     表示匹配\d+ 或者"abc" ,但第一個括號不計入分組
4、其他細節

(1) 貪婪與非貪婪

不加?表示貪婪匹配,如"aaa111bbbccc111" ,表示式".+\d+" 會匹配整個字串;

加?,即".+?\d+"會匹配到"aaa111"

(2) 修飾符

會在下方所講的函式中使用,

注意:

我們編寫的程式碼都是Unicode字符集,所以\w就會匹配中文漢字,然而我們上面講的\w匹配字母、數字及下劃線。有的人會認為矛盾,其實不矛盾的,中文在Unicode內部表示都是字母或漢字。所以如果我們只想匹配英文字母、不匹配漢字,就需要加上re.A.

5、re模組常用函式

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

根據pattern從string的頭部開始匹配字串,只返回第1次匹配成功的物件,否則,返回None。flags就是上面講的修飾符

r = re.match(r'Python', "Python:Java:C")

r是一個re.Match物件,若要拿到內容需要:

r.group()或r.group(0)

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

與match()方法用法相同,唯一的區別是他可以從字元的任意位置開始匹配,一旦符合就返回

re.match(r"Python", "Java:C:Python"). 會返回None,因為該字串一開始是“Java”

re.search(r"Python", "Java:C:Python"). 匹配成功

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

根據pattern在string中匹配字串。如果匹配成功,返回包含匹配結果的列表,否則,返回空列表。但是pattern中有分組時,返回包含多個元組的列表,每個元組對應一個分組。

s='Python:Java:C'

re.findall("\w+", s). # 返回 ['Python', 'Java', 'C']

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

類似字串的split()函式,區別是可以根據正則表示式來切分。根據pattern分隔string,maxsplit表示最大分隔數。

s='Python:Java:C'

re.split(r"\w+", s). # 返回 ['Python', 'Java', 'C']

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

類似字串的replace函式。

根據指定的正則表示式,替換字串中的子串。pattern是一個正則表示式,repl是用於替換的字串,string是源字串,如果count為0,則返回string中匹配的所有結果。如果count>0,則返回前count個匹配結果。

s='Python:Java:C'

re.sub(r'\w+', 'php', s) # 返回 “php:php:php”

(6) re.compile(pattern,flags=0)

編譯正則表示式pattern,返回一個pattern物件。

之後我們可以用pattern物件呼叫上方所講的5種方法。

p = re.compile(r"\w+")

p.findall('Python:Java:C'). # 返回 ['Python', 'Java', 'C']

9
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Activity:異常下的生命週期