如何使用Python的正則表達(dá)式-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“如何使用Python的正則表達(dá)式”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何使用Python的正則表達(dá)式”吧!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括烏恰網(wǎng)站建設(shè)、烏恰網(wǎng)站制作、烏恰網(wǎng)頁(yè)制作以及烏恰網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,烏恰網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到烏恰省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

一、正則表達(dá)式介紹

1.學(xué)習(xí)爬蟲(chóng),為什么必須會(huì)正則表達(dá)式?
    有時(shí)候,我們爬取一些網(wǎng)頁(yè)具體內(nèi)容時(shí),會(huì)發(fā)現(xiàn)我們只需要這個(gè)網(wǎng)頁(yè)某個(gè)標(biāo)簽的一部分內(nèi)容,或者是這個(gè)標(biāo)簽的某個(gè)屬性的值時(shí),用普通的 xpath 或者css.selector是不能實(shí)現(xiàn)我們的想法的,這個(gè)時(shí)候就必須用到正則表達(dá)式去匹配獲取。
2.正則表達(dá)式官方簡(jiǎn)介?
    正則表達(dá)式,又稱(chēng)規(guī)則表達(dá)式。(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫(xiě)為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。

二、看代碼,邊學(xué)邊敲邊記正則表達(dá)式

day01:

 1'''
2author : 極簡(jiǎn)XksA
3date : 2018.7.27
4goal : 正則表達(dá)式
5'''
6
7import re
8
9line = 'jijianXksA123'
10
11# ^a 表示匹配以a開(kāi)頭的字符串(只匹配一次)
12# . 表示該字符可為任意字符(只匹配一次)
13# * 表示前面的字符可以出現(xiàn)任意次(0次或多次)(多次匹配)
14reg_str01 = '^j.*'    # 表示以j開(kāi)頭的字符串
15# re.match 函數(shù)
16# 第一個(gè)參數(shù)是匹配的格式
17# 第二參數(shù)是要匹配的字符串
18# 返回值為:匹配成功,返回match對(duì)象,否則返回:None
19
20if re.match(reg_str01,line) :
21    print("匹配成功!")  # reg_str = '^j.*'     匹配成功
22else:
23    print("匹配失敗!")  # reg_str = '^i.*'     匹配失敗
24
25
26# 23$ 表示匹配以23結(jié)尾的字符串(只匹配一次)
27reg_str02 = '^j.*23$'
28if re.match(reg_str02,line) :
29    print("匹配成功!")  # reg_str = '^j.*23$'     匹配成功
30else:
31    print("匹配失?。?quot;)  # reg_str = '^j.*13$'     匹配失敗
32
33
34line01 = 'boooboaobxby'
35# () 內(nèi)的為 匹配模式,通過(guò) group函數(shù) 可以取出匹配結(jié)果
36# 正則表達(dá)式貪婪匹配模式:從后面(右邊)開(kāi)始匹配
37reg_str03 = '.*(b.*b).*'
38test01 = re.match(reg_str03,line01)
39if  test01:
40    print(test01.group(1))      # result : bxb
41else:
42    print("匹配失敗!")
43
44# 正則表達(dá)式非貪婪匹配模式:從前面(左邊)開(kāi)始匹配
45# ? : 表示從左邊開(kāi)始匹配,匹配到第一個(gè)符合模式的內(nèi)容,即進(jìn)入模式
46#
47reg_str03 = '.*?(b.*b).*'   # 半貪婪匹配
48reg_str04 = '.*?(b.*?b).*'  # 非貪婪匹配
49test01 = re.match(reg_str03,line01)
50test02 = re.match(reg_str04,line01)
51if  test01 and test02:
52    print(test01.group(1))      # result : boooboaobxb
53    print(test02.group(1))  # result : booob
54else:
55    print("匹配失敗!")

day02:

 1'''
2author : 極簡(jiǎn)XksA
3date : 2018.7.28
4goal : 正則表達(dá)式
5'''
6import re
7line01 = 'boooboaobcxby'
8
9def regtest(reg_str,line = line01):
10    test = re.match(reg_str, line)
11    if test:
12        print(test.group(1))
13    else:
14        print("匹配失敗!")
15
16# + :表示前面的字符,至少出現(xiàn)一次
17reg_str04 = '.*(b.+b).*'  # (b.+b)表示b與b之間至少有一個(gè)字符
18regtest(reg_str04)      # result : bcxb
19
20# {n} : 控制前面字符出現(xiàn)次數(shù)
21# a{2} : 表示a出現(xiàn)兩次
22# b{3,4} : 表示b至少出現(xiàn)3次,最多出4次
23# c{4,} : 表示c至少出現(xiàn)4次
24reg_str05 = '.*(b.{2}b).*'  # (b.{2}b)表示匹配到的b與b之間,只有兩字符
25reg_str06 = '.*(b.{3,4}b).*'  # (b.{3,6}b)表示匹配到的b與b之間,至少有3個(gè)字符,至多有4個(gè)字符
26reg_str07 = '.*(b.{4,}b).*'  # (b.{8,}b)表示匹配到的b與b之間,至少有4個(gè)字符
27regtest(reg_str05)   # result : bcxb
28regtest(reg_str06)   # result : boaob
29regtest(reg_str07)   # result : boaobcxb
30
31# | :表示 或
32# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功
33reg_str08 = '.*(boo|abc)'
34reg_str09 = '.*(abc|boo)'
35regtest(reg_str08)   # result : boo
36regtest(reg_str09)   # result : boo
37
38# [] : 表示 里面包含的內(nèi)容都可以進(jìn)行匹配,包含內(nèi)容只有表面字符含義
39# [abcd] : 表示 只要這個(gè)字符為 a/b/c/d中的一個(gè)都可以匹配成功
40# [0-9] : 表示 只要這個(gè)字符在 0-9 這個(gè)區(qū)間內(nèi),都可以匹配成功
41# [^x] : 表示匹配 字符不為 x
42line02 = '電話號(hào):15573563467'
43reg_str10 = '.*(1[3458][0-9]{9}).*'
44reg_str11 = '.*(1[3458][^1]{9}).*'
45regtest(reg_str10,line02)   # result : 15573563467
46regtest(reg_str11,line02)   # result : 15573563467
47
48# \s 表示匹配空格,匹配一次
49# \S 表示匹配不是空格的字符,匹配一次
50# \w 表示匹配 A-Z、0-9、_ 中的容易字符,匹配一次
51# \W 與 \w 相反
52# \d 表示數(shù)字
53# [\u4E00-\u9FA5] : 表示所有漢字,unicode 編碼
54
55def regtest_test(reg_str,line = line01):
56    test = re.match(reg_str, line)
57    if test:
58        print(test.group(1)+':'+test.group(2)+'-'+test.group(3)+'-'+test.group(4))
59    else:
60        print("匹配失?。?quot;)
61
62# 簡(jiǎn)單實(shí)例
63str01 = '張三出生于1997年12月20日'
64str02 = '李四出生于1989-01-20'
65str03 = '王五出生于1997/2/5'
66str04 = '趙六出生于1997.12.20'
67str = [str01,str02,str03,str04]
68# 提取出姓名+出生日期
69# 匹配模式
70reg_str12 = '(.*)出生于(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'
71for i in range(4):
72    regtest_test(reg_str12,str[i])
73# result :
74#       張三:1997-12-20
75#       李四:1989-01-20
76#       王五:1997-2-5
77#       趙六:1997-12-20

到此,相信大家對(duì)“如何使用Python的正則表達(dá)式”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

本文標(biāo)題:如何使用Python的正則表達(dá)式-創(chuàng)新互聯(lián)
文章鏈接:http://bm7419.com/article28/cesdcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、云服務(wù)器網(wǎng)站導(dǎo)航、軟件開(kāi)發(fā)、網(wǎng)站策劃品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司