1. 程式人生 > >第二篇:正則表達式

第二篇:正則表達式

utf-8 re模塊 數字 Coding 爬蟲 無限 正則 lfa this

爬蟲需要用到正則,python內置了正則re模塊

#!/usr/bin/env python3.5
# _*_coding:utf-8 _*_

import re

#要匹配對象
line = "This is a beautiful woman"
#匹配模式,^表示行首,
regex_str1 = "^T.*n$"
regex_str2 = "^t"

if re.match(regex_str1,line):
    print("以T開頭,以n結尾")

if re.match(regex_str2,line):
    print("以t開頭")

關於貪婪匹配和懶惰匹配:正則默認匹配模式是貪婪匹配模式:

line = "AOOOOAOOOABAlfsdf"
regex_str = ".*(A.*A).*"
match_obj = re.match(regex_str,line)
print(match_obj.group(1))

result:
ABA

上面的例子,這種屬於貪婪匹配,下面引入? 符號就能看出效果了,?屬於懶惰匹配:

line = "AOOOOAOOOABAlfsdf"
regex_str = "A.*?A"
match_obj = re.match(regex_str,line)
print(match_obj.group())

result:
AOOOOA

沒加?的情況:

line = "AOOOOAOOOABAlfsdf"
regex_str = "A.*A"
match_obj = re.match(regex_str,line)
print(match_obj.group())

result:
AOOOOAOOOABA

+前面的字符至少出現一次,下面的子字符串‘AA’就不符合要求了:

line = "AOOOOAOOOABAlfAAsdf"
regex_str = ".*(A.+A)"
match_obj = re.match(regex_str,line)
print(match_obj.group(1))

result:
AlfAA

大括號,限定次數:

{m}匹配前一個字符m次,{m,n}匹配前一個字符m到n次,省略n則匹配m至無限次,省略m則匹配0至n次

中括號,指定字符:

[abc] 匹配abc中的一個,[^a] 匹配除了a以外的一個字符,[0-9] 匹配0到9中的一個

\s 匹配空白字符  \S 匹配非空白字符

\w 匹配單詞字符 \W 匹配非單詞字符

[\u4E00-\u9FA5] 匹配漢字:

line = "abcad大家下午好"
regex_str = ".*?([\u4E00-\u9FA5].*)"
match_obj = re.match(regex_str,line)
print(match_obj.group(1))

result:
大家下午好

\d 匹配數字

第二篇:正則表達式