(1)re.match()函數(shù)

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),祥符網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:祥符等地區(qū)。祥符做網(wǎng)站價(jià)格咨詢:028-86922220
re.match 嘗試從字符串的開(kāi)始匹配一個(gè)模式。
函數(shù)語(yǔ)法:
re.match(pattern, string, flags=0)
函數(shù)參數(shù)說(shuō)明:
參數(shù)
描述
pattern ? ?匹配的正則表達(dá)式 ?
string ? ?要匹配的字符串。 ?
flags ? ?標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。 ?
匹配成功re.match方法返回一個(gè)匹配的對(duì)象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。
匹配對(duì)象方法
描述
group(num=0) ? ?匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),在這種情況下它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。 ?
groups() ? ?返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。 ?
(2)re.research()函數(shù)
re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。
函數(shù)語(yǔ)法:
re.search(pattern, string, flags=0)
函數(shù)參數(shù)說(shuō)明:
參數(shù)
描述
pattern ? ?匹配的正則表達(dá)式 ?
string ? ?要匹配的字符串。 ?
flags ? ?標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。 ?
匹配成功re.search方法方法返回一個(gè)匹配的對(duì)象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。
匹配對(duì)象方法
描述
group(num=0) ? ?匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),在這種情況下它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。 ?
groups() ? ?返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。 ?
(3)實(shí)例
我這里采用re.search()函數(shù)解決的問(wèn)題。
測(cè)試數(shù)據(jù)集為購(gòu)物網(wǎng)站用戶評(píng)論
實(shí)例代碼:
[python]?view plain?copy
#?-*-coding:utf-8?-*-
import?sys
import?re
reload(sys)
text?=?open('JD_DFB_comments.txt')
line?=?text.readline()
#i?=?0
while?line:
#i?=?i+1
#re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。
n1?=?re.search(r'(要(是|能)(.*)就(更|好|再|(zhì)直觀|完美|太)(.*)了)',line)
n2?=?re.search(r'(如果)(.*)就(更|好|再|(zhì)直觀|完美|太)(.*)了',line)
#打開(kāi)將要寫(xiě)入的數(shù)據(jù)
data?=?open('aa.txt','a')
if?n1:
#print?line
data.write(line)??????#寫(xiě)入匹配到的數(shù)據(jù)
#print?i??????????????記錄匹配結(jié)果所在的行數(shù)
#print?n1.group()?????#等于print?line
print?n1.group(3)?????#打出第三個(gè)括號(hào)里的內(nèi)容
if?n2:
#print?n2.group()
print?n2.group(2)
line?=?text.readline()
text.close()
閱讀更多
個(gè)人分類:?Python語(yǔ)言
想對(duì)作者說(shuō)點(diǎn)什么??我來(lái)說(shuō)一句
Python中re的match、search、findall、finditer區(qū)別
match()函數(shù)只檢測(cè)RE是不是在string的開(kāi)始位置匹配, search()會(huì)掃描整個(gè)string查找匹配, 也就是說(shuō)match()只有在0位置匹配成功的話才有返回,如果不是開(kāi)始位置匹配成功的話,match()就返回none
例如:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
import re
text = 'pythontab'
m = re.match(r"\w+", text)
if m:
print m.group(0)
else:
print 'not match'
結(jié)果是:pythontab
而:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = '@pythontab'
m = re.match(r"\w+", text)
if m:
print m.group(0)
else:
print 'not match'
結(jié)果是:not match
search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配
例如:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = 'pythontab'
m = re.search(r"\w+", text)
if m:
print m.group(0)
else:
print 'not match'
結(jié)果是:pythontab
那這樣呢:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = '@pythontab'
m = re.search(r"\w+", text)
if m:
print m.group(0)
else:
print 'not match'
結(jié)果是:pythontab
在日常開(kāi)發(fā)當(dāng)中,我們肯定會(huì)有遇到很多需要正則表達(dá)式處理的地方。下面來(lái)分享一下我了解到的Python正則表達(dá)式知識(shí)。
re.match的作用是嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回 none。具體的語(yǔ)法是:
re.match(pattern, string, flags=0)
參數(shù)說(shuō)明:
1.pattern:匹配的正則表達(dá)式;
2.string:要匹配的字符串;
3.flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。
01 Re概覽
Re模塊是python的內(nèi)置模塊,提供了正則表達(dá)式在python中的所有用法,默認(rèn)安裝位置在python根目錄下的Lib文件夾(如 ..\Python\Python37\Lib)。主要提供了3大類字符串操作方法:
字符查找/匹配
字符替換
字符分割
由于是面向字符串類型的模塊,就不得不提到字符串編碼類型。re模塊中,模式串和搜索串既可以是 Unicode 字符串 (常用str類型) ,也可以是8位字節(jié)串 (bytes,2位16進(jìn)制數(shù)字,例如\xe5) , 但要求二者必須是同類型字符串。
02 字符串查找/匹配
預(yù)編譯:compile
在介紹查找和匹配函數(shù)前,首先需要知道re的compile函數(shù),該函數(shù)可以將一個(gè)模式串編譯成正則表達(dá)式類型,以便后續(xù)快速匹配和復(fù)用
import?re pattern?=?re.compile(r'[a-z]{2,5}') type(pattern)?#re.Pattern
此例創(chuàng)建了一個(gè)正則表達(dá)式式對(duì)象 (re.pattern) ,命名為pattern,用于匹配2-5位小寫(xiě)字母的模式串。后續(xù)在使用其他正則表達(dá)式函數(shù)時(shí),即可使用pattern進(jìn)行方法調(diào)用。
匹配:match
match函數(shù)用于從文本串的起始位置開(kāi)始匹配,若匹配成功,則返回相應(yīng)的匹配對(duì)象,此時(shí)可調(diào)用group()方法返回匹配結(jié)果,也可用span()方法返回匹配起止下標(biāo)區(qū)間;否則返回None
import?re pattern?=?re.compile(r'[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.match(text1) print(res)?# if?res: ?print(res.group())?#this ?print(res.span())?#(0,?4) text2?=?'是的,?this?is?a?re?test' print(pattern.match(text2))#None
match函數(shù)還有一個(gè)變形函數(shù)fullmatch,當(dāng)且僅當(dāng)模式串與文本串剛好全部匹配時(shí),返回一個(gè)匹配對(duì)象,否則返回None
搜索:search
match只提供了從文本串起始位置匹配的結(jié)果,如果想從任意位置匹配,則可調(diào)用search方法,與match方法類似,當(dāng)任意位置匹配成功,則立即返回一個(gè)匹配對(duì)象,也可調(diào)用span()方法獲取起止區(qū)間、調(diào)用group方法獲得匹配文本串
import?re pattern?=?re.compile(r'\s[a-z]{2}') text1?=?'this?is?a?re?test' res?=?pattern.search(text1) print(res)?# if?res: ?print(res.group())?#is ?print(res.span())?#(4,?7) pattern2?=?re.compile(r'\s[a-z]{5}') text2?=?'是的,this?is?a?re?test' print(pattern2.search(text2))#None
match和search均用于匹配單個(gè)結(jié)果,唯一區(qū)別在于前者是從起始位置開(kāi)始匹配,而后者從任意位置匹配,匹配成功則返回一個(gè)match對(duì)象。
全搜索:findall/finditer
幾乎是最常用的正則表達(dá)式函數(shù),用于尋找所有匹配的結(jié)果,例如在爬蟲(chóng)信息提取中,可非常方便地提取所有匹配字段
import?re pattern?=?re.compile(r'\s[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.findall(text1) print(res)?#['?is',?'?re',?'?test']
findall返回的是一個(gè)列表對(duì)象類型,當(dāng)無(wú)匹配對(duì)象時(shí),返回一個(gè)空列表。為了避免因同時(shí)返回大量匹配結(jié)果占用過(guò)多內(nèi)存,可以調(diào)用finditer函數(shù)返回一個(gè)迭代器類型,其中每個(gè)迭代元素是一個(gè)match對(duì)象,可繼續(xù)調(diào)用group和span方法獲取相應(yīng)結(jié)果
import?re pattern?=?re.compile(r'\s[a-z]{2,5}') text1?=?'this?is?a?re?test' res?=?pattern.finditer(text1) for?r?in?res: ?print(r.group()) """ ?is ?re ?test """
當(dāng)匹配模式串較為簡(jiǎn)單或者僅需單詞調(diào)用時(shí),上述所有方法也可直接調(diào)用re類函數(shù),而無(wú)需事先編譯。此時(shí)各方法的第一個(gè)參數(shù)為模式串。
import?re pattern?=?re.compile(r'\d{2,5}') text?=?'this?is?re?test' re.findall('[a-z]+',?text)?#['this',?'is',?'re',?'test'] 03 字符串替換/分割
替換:sub/subn
當(dāng)需要對(duì)文本串進(jìn)行條件替換時(shí),可調(diào)用re.sub實(shí)現(xiàn) (當(dāng)然也可先編譯后再用調(diào)用實(shí)例方法) ,相應(yīng)參數(shù)分別為模式串、替換格式、文本串,還可以通過(guò)增加缺省參數(shù)限定替換次數(shù)和匹配模式。通過(guò)在模式串進(jìn)行分組,可實(shí)現(xiàn)字符串的格式化替換(類似字符串的format方法),以實(shí)現(xiàn)特定任務(wù)。
import?re text?=?'today?is?2020-03-05' print(re.sub('-',?'',?text))?#'today?is?20200305' print(re.sub('-',?'',?text,?1))?#'today?is?202003-05' print(re.sub('(\d{4})-(\d{2})-(\d{2})',?r'\2/\3/\1',?text))?#'today?is?03/05/2020'
re.sub的一個(gè)變形方法是re.subn,區(qū)別是返回一個(gè)2元素的元組,其中第一個(gè)元素為替換結(jié)果,第二個(gè)為替換次數(shù)
import?re text?=?'today?is?2020-03-05' print(re.subn('-',?'',?text))?#('today?is?20200305',?2)
分割:split
還可以調(diào)用正則表達(dá)式實(shí)現(xiàn)字符串的特定分割,相當(dāng)于.split()方法的一個(gè)加強(qiáng)版,實(shí)現(xiàn)特定模式的分割,返回一個(gè)切割后的結(jié)果列表
import?re text?=?'today?is?a?re?test,?what?do?you?mind?' print(re.split(',',?text))?#['today?is?a?re?test',?'?what?do?you?mind?'] 04 總結(jié)
python中的re模塊提供了正則表達(dá)式的常用方法,每種方法都包括類方法調(diào)用(如re.match)或模式串的實(shí)例調(diào)用(pattern.match)2種形式
常用的匹配函數(shù):match/fullmatch
常用的搜索函數(shù):search/findall/finditer
常用的替換函數(shù):sub/subn
常用的切割函數(shù):split
還有其他很多方法,但不是很常用,具體可參考官方文檔
另外,python還有第三方正則表達(dá)式庫(kù)regex可供選擇
到此這篇關(guān)于一文秒懂python正則表達(dá)式常用函數(shù)的文章就介紹到這了,希望大家以后多多支持!
看了你的提問(wèn),你的要求是:
輸入格式:
輸入包含兩行:
待匹配字符串
正則表達(dá)式
輸出格式:
若正則表達(dá)式能夠匹配第一行字符串則輸出True,否則,輸出False
以下是我依據(jù)你的功能需求,個(gè)人簡(jiǎn)單寫(xiě)的一些代碼,供你參考:
import?re
flg=True
#定義主要工作代碼函數(shù)
def?jobCode(txtstr,regex):
result=re.search(regex,txtstr)
#如果匹配第一行字符串flg為T(mén)rue,否則flg為False
if?result.group()==txtstr:
#print(result.group())
return?flg==True?#返回flg并終止循環(huán)
else:
#print(result.group())
return?flg==False?#返回flg并終止循環(huán)
#程序主入口
if?__name__=='__main__':
txtstr=str(input("請(qǐng)輸入待匹配的字符串:"))
regex=input("請(qǐng)輸入正則表達(dá)式:")
print(jobCode(txtstr,regex))?#調(diào)用定義函數(shù)jobCode()
代碼應(yīng)該還能更簡(jiǎn)潔,具體你自己去完善。
純手工,如果對(duì)你有幫助望采納!
正則表達(dá)式是一個(gè)特殊的字符序列,可以幫助您使用模式中保留的專門(mén)語(yǔ)法來(lái)匹配或查找其他字符串或字符串集。 正則表達(dá)式在UNIX世界中被廣泛使用。
注:很多開(kāi)發(fā)人員覺(jué)得正則表達(dá)式比較難以理解,主要原因是缺少使用或不愿意在這上面花時(shí)間。
re模塊在Python中提供對(duì)Perl類正則表達(dá)式的完全支持。如果在編譯或使用正則表達(dá)式時(shí)發(fā)生錯(cuò)誤,則re模塊會(huì)引發(fā)異常re.error。
在這篇文章中,將介紹兩個(gè)重要的功能,用來(lái)處理正則表達(dá)式。 然而,首先是一件小事:有各種各樣的字符,這些字符在正則表達(dá)式中使用時(shí)會(huì)有特殊的意義。 為了在處理正則表達(dá)式時(shí)避免混淆,我們將使用:r'expression'原始字符串。
匹配單個(gè)字符的基本模式
編譯標(biāo)志可以修改正則表達(dá)式的某些方面。標(biāo)志在re模塊中有兩個(gè)名稱:一個(gè)很長(zhǎng)的名稱,如IGNORECASE,和一個(gè)簡(jiǎn)短的單字母形式,如。
1.match函數(shù)
此函數(shù)嘗試將RE模式與可選標(biāo)志的字符串進(jìn)行匹配。
下面是函數(shù)的語(yǔ)法 :
這里是參數(shù)的描述 :
pattern : 這是要匹配的正則表達(dá)式。
string : 這是字符串,它將被搜索用于匹配字符串開(kāi)頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標(biāo)志。 這些是修飾符,如下表所列。
re.match函數(shù)在成功時(shí)返回匹配對(duì)象,失敗時(shí)返回None。使用match(num)或groups()函數(shù)匹配對(duì)象來(lái)獲取匹配的表達(dá)式。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
2.search函數(shù)
此函數(shù)嘗試將RE模式與可選標(biāo)志的字符串進(jìn)行匹配。
下面是這個(gè)函數(shù)的語(yǔ)法 :
這里是參數(shù)的描述 :
pattern : 這是要匹配的正則表達(dá)式。
string : 這是字符串,它將被搜索用于匹配字符串開(kāi)頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標(biāo)志。 這些是修飾符,如下表所列。
re.search函數(shù)在成功時(shí)返回匹配對(duì)象,否則返回None。使用match對(duì)象的group(num)或groups()函數(shù)來(lái)獲取匹配的表達(dá)式。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
3.匹配與搜索
Python提供基于正則表達(dá)式的兩種不同的原始操作:match檢查僅匹配字符串的開(kāi)頭,而search檢查字符串中任何位置的匹配(這是Perl默認(rèn)情況下的匹配)。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
4.搜索和替換
使用正則表達(dá)式re模塊中的最重要的之一是sub。
模塊
此方法使用repl替換所有出現(xiàn)在RE模式的字符串,替換所有出現(xiàn),除非提供max。此方法返回修改的字符串。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
5.正則表達(dá)式修飾符:選項(xiàng)標(biāo)志
正則表達(dá)式文字可能包含一個(gè)可選修飾符,用于控制匹配的各個(gè)方面。 修飾符被指定為可選標(biāo)志。可以使用異或(|)提供多個(gè)修飾符,如前所示,可以由以下之一表示 :
6.正則表達(dá)模式
除了控制字符(+ ? . * ^ $ ( ) [ ] { } | ),所有字符都與其自身匹配。 可以通過(guò)使用反斜杠將其轉(zhuǎn)換為控制字符。
7.正則表達(dá)式示例
字符常量
字符類
特殊字符類
重復(fù)匹配
非貪婪重復(fù)
這匹配最小的重復(fù)次數(shù) :
用圓括號(hào)分組
反向引用
這與以前匹配的組再次匹配 :
備擇方案
python|perl : 匹配“python”或“perl”
rub(y|le) : 匹配 “ruby” 或 “ruble”
Python(!+|?) : “Python”后跟一個(gè)或多個(gè)! 還是一個(gè)?
錨點(diǎn)
這需要指定匹配位置。
帶括號(hào)的特殊語(yǔ)法
開(kāi)課吧廣場(chǎng)-人才學(xué)習(xí)交流平臺(tái)-開(kāi)課吧
網(wǎng)頁(yè)題目:python正則判斷函數(shù) python 正則判斷
URL分享:http://chinadenli.net/article38/doopssp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航、商城網(wǎng)站、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)