python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程
一.創(chuàng)建正則表達(dá)式
1.re模塊
所有python的正則表達(dá)式都在re模塊中,使用時(shí)導(dǎo)入
import re
re模塊的compile()方法是構(gòu)成正則表達(dá)式的方法,向compile()傳入一個(gè)字符串表示正則表達(dá)式,該方法返回一個(gè)Regex模式的對(duì)象。
2.匹配Regex對(duì)象
Regex對(duì)象的seach()方法可以查找插入的字符串,如個(gè)查找不到匹配的返回null,否則將匹配的值返回到一個(gè)Math對(duì)象,通過(guò)Math對(duì)象的group()方法查看匹配結(jié)果
import re
ageRegex=re.compile(r'\d\d\d\d')
a=ageRegex.search("今年是2023年")
print(a)
print(a.group())
'''<re.Match object; span=(3, 7), match='2023'>
2023
'''二.正則表達(dá)式匹配更多模式
1.用括號(hào)分組
在compile插入字符串是利用括號(hào)可以將匹配的數(shù)據(jù)進(jìn)行分組,并通過(guò)Math對(duì)象的group(index)加下標(biāo)的方式分布顯示,如果查看全部數(shù)據(jù)用groups()方法
import re
Regex=re.compile(r'(\d\d\d\d)-(\d)-(\d)')
a=Regex.search('今年是2023-1-1')
print(a)
print(a.group(1))
print(a.groups())
'''<re.Match object; span=(3, 11), match='2023-1-1'>
2023
('2023', '1', '1')
'''2.用管道匹配多個(gè)分組
符號(hào)|為管道,匹配多個(gè)字符串是可以用|連接,例如A|B,就可以匹配A或B,如果A,B都出現(xiàn)在字符串中只返回第一到Math對(duì)象中
import re
Regex=re.compile(r'hello|hi')
a=Regex.search('hello world hi time')
print(a.group())
'''hello'''也可以通過(guò)括號(hào)將多個(gè)匹配的數(shù)據(jù)分組,group查看匹配的數(shù)據(jù),group(1)查看從管道匹配的數(shù)據(jù)
import re
Regex=re.compile(r'Bat(man|mobile|bat)')
a=Regex.search('Batmobile lost a wheel , l like Batman')
print(a.group())
print(a.group(1))
'''Batmobile
mobile'''3.用問(wèn)號(hào)表示可選
如果要匹配的數(shù)據(jù)可以在也可以不在,可以用?來(lái)實(shí)現(xiàn)匹配
import re
Regex=re.compile(r'hello (world)?')
a=Regex.search('hello world hello time')
b=Regex.search('hello time')
print(a.group())
print(b.group())
'''hello world
hello '''但字符串中有可選的數(shù)據(jù)時(shí)匹配,如果沒(méi)有也不影響其他數(shù)據(jù)的匹配
4.用星號(hào)匹配零次或多次
星號(hào)*表示出現(xiàn)零次或多次,即標(biāo)星號(hào)的內(nèi)容可以出現(xiàn)一次或多次
import re
Regex=re.compile(r'(super)*man')
a=Regex.search('I am superman')
b=Regex.search('I am supersupersuperman')
print(a.group())
print(b.group())
'''superman
supersupersuperman
'''5.用加號(hào)表示匹配一次或多次
星號(hào)表示匹配零次或多次,而加號(hào)表示匹配一次或多次,加號(hào)必須有一次匹配才可以,否則返回的Math對(duì)象為None
import re
Regex=re.compile(r'(super)+man')
c=Regex.search('I am man')
a=Regex.search('I am superman')
b=Regex.search('I am supersupersuperman')
print(a.group())
print(b.group())
print(c)
'''superman
supersupersuperman
None
'''6.用花括號(hào)匹配特定次數(shù)
(a){3}表示匹配字符串‘aaa’但不匹配‘aa’,如果花括號(hào)里有兩個(gè)數(shù)表示范圍從最小值到最大值,例如(a){3,5}表示匹配字符串‘aaa’,‘aaaa’,‘aaaaa’,也可以省略最大值或最小值
import re
Regex=re.compile(r'(hello){2}')
a=Regex.search('hellohello time hello')
print(a.group())
'''hellohello'''三.貪心和非貪心匹配
python的正則表達(dá)式在默認(rèn)情況下是貪心的,即在有二意的情況下,默認(rèn)匹配最多的的字符串,如果想人正則表達(dá)式不貪心,可以在花括號(hào)后面加上一個(gè)問(wèn)號(hào)來(lái)約束貪心
import re
Regex=re.compile(r'(a){2,8}?')
Regex1=re.compile(r'(a){2,8}')
string='aaaaaaaaaaaaaa'
a=Regex.search(string)
b=Regex1.search(string)
print(a.group()) #非貪心
print(b.group())
'''aa
aaaaaaaa'''findall()方法
search()方法將第一次匹配的字符串返回到一個(gè)Math對(duì)象,findall()和search()方法類似,但findall()方法可以匹配多個(gè)匹配的字符串,如果只匹配一個(gè)就返回匹配的字符串,如果匹配多個(gè),將返回一個(gè)元組,元組里包含匹配的字符串
import re Regex=re.compile(r'hello') string='hello world! hello time!' a=Regex.search(string) b=Regex.findall(string) print(a.group()) print(b) '''hello ['hello', 'hello']'''
四.字符分類
| 縮寫字符串分類 | 表示 |
| \d | 0到9的任何數(shù)字 |
| \D | 除0到9以外的任意字符 |
| \w | 字母,數(shù)字或下劃線字符 |
| \W | 除字母,數(shù)字和下劃線外的任意字符 |
| \s | 空格,制表符或換行符 |
| \S | 除空格,制表符和換行符外的任意字符 |
例如:\d+匹配一次或多次數(shù)字,\s匹配空格,制表符或換行符,\w+匹配字母,數(shù)字或下劃線
import re
Regex=re.compile(r'\d+\s\w+')
a=Regex.findall('1 dog,2 pig,3 duck,4 cat,5 fish,6 col')
print(a)
'''['1 dog', '2 pig', '3 duck', '4 cat', '5 fish', '6 col']'''五.自定義字符分類
1.創(chuàng)建自定義字符
通過(guò)-創(chuàng)建自定義字符,例如[a-z]表示匹配a~z的小寫字母,[A-Z0-9]匹配A~Z或0~9,當(dāng)加上(^)時(shí)表示不匹配這些字符串,例如[^a-z]表示不匹配a~z,[aiuoe]表示匹配指定的字母aioue
import re Regex=re.compile(r'[a-z]') Regex1=re.compile(r'[aioue]') #元音 string='abcdefghijklmnopqrstuvwsyz' a=Regex.findall(string) b=Regex1.findall(string) print(b) '''['a', 'e', 'i', 'o', 'u']''' print(a) '''['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 's', 'y', 'z']'''
2.插入符號(hào)和美元符號(hào)
插入符號(hào)用(^)表示,插入符號(hào)表示匹配的字符串開(kāi)始的位置,美元符號(hào)$表示結(jié)束,例如^\d表示從0~9的數(shù)字開(kāi)始匹配,\d$表示匹配0~9結(jié)束的字符串
import re
Regex=re.compile(r'^\d+\w+$')
a=Regex.findall('1b32c23d')
print(a)
'''['1b32c23d']'''3.通配字符
用.表示通配符,通配符可以匹配除了換行之外的所有字符
import re
Regex=re.compile(r'.a.')
a=Regex.findall('dfweascareaefefwa')
print(a)
'''['eas', 'car', 'eae']'''4.用(.*)匹配所有字符
(.*)匹配所有字符,.表示匹配除換行符的所有字符,*表示出現(xiàn)零次或多次
import re
Regex=re.compile(r'<.*>')
a=Regex.findall('<adf>,<fedf>,<gre>,<fww2>')
print(a)
'''['<adf>,<fedf>,<gre>,<fww2>']'''5.用參數(shù)re.DOTALL匹配換行
正則表達(dá)式中通過(guò)插入re.DOTALL作為compile的第二參數(shù)來(lái)人通配符匹配所有字符,包括換行
import re
Regex=re.compile(r'.*',re.DOTALL)
a=Regex.findall('hello world hello time')
print(a)
'''['hello world hello time', '']'''到此這篇關(guān)于python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程的文章就介紹到這了,更多相關(guān)python 正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決python-docx打包之后找不到default.docx的問(wèn)題
今天小編就為大家分享一篇解決python-docx打包之后找不到default.docx的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
使用Pandas實(shí)現(xiàn)數(shù)據(jù)的清理的入門詳解
數(shù)據(jù)清理是數(shù)據(jù)分析過(guò)程中的關(guān)鍵步驟,它涉及識(shí)別缺失值、重復(fù)行、異常值和不正確的數(shù)據(jù)類型,本文將介紹6個(gè)經(jīng)常使用的數(shù)據(jù)清理操作,希望對(duì)大家有所幫助2023-08-08
selenium+headless chrome爬蟲的實(shí)現(xiàn)示例
這篇文章主要介紹了selenium+headless chrome爬蟲的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
python實(shí)現(xiàn)圖片識(shí)別汽車功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片識(shí)別汽車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
淺談Selenium+Webdriver 常用的元素定位方式
這篇文章主要介紹了淺談Selenium+Webdriver 常用的元素定位方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python爬蟲爬取愛(ài)奇藝電影片庫(kù)首頁(yè)的實(shí)例代碼
這篇文章主要介紹了Python爬蟲爬取愛(ài)奇藝電影片庫(kù)首頁(yè)的實(shí)例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05

