99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀Python正則表達(dá)式之基礎(chǔ)篇
Python正則表達(dá)式之基礎(chǔ)篇
2017-08-09
收藏

Python正則表達(dá)式之基礎(chǔ)篇

正則表達(dá)式是用于處理字符串的強(qiáng)大工具,它并不是Python的一部分。

其他編程語(yǔ)言中也有正則表達(dá)式的概念,區(qū)別只在于不同的編程語(yǔ)言實(shí)現(xiàn)支持的語(yǔ)法數(shù)量不同。

它擁有自己獨(dú)特的語(yǔ)法以及一個(gè)獨(dú)立的處理引擎,在提供了正則表達(dá)式的語(yǔ)言里,正則表達(dá)式的語(yǔ)法都是一樣的。

下圖展示了使用正則表達(dá)式進(jìn)行匹配的流程:

1.1介紹

正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語(yǔ)法以及一個(gè)獨(dú)立的處理引擎,效率上可能不如str自帶的方法,但功能十分強(qiáng)大。得益于這一點(diǎn),在提供了正則表達(dá)式的語(yǔ)言里,正則表達(dá)式的語(yǔ)法都是一樣的,區(qū)別只在于不同的編程語(yǔ)言實(shí)現(xiàn)支持的語(yǔ)法數(shù)量不同;但不用擔(dān)心,不被支持的語(yǔ)法通常是不常用的部分。

正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。Python 自1.5版本起增加了re 模塊,它提供 Perl 風(fēng)格的正則表達(dá)式模式。re 模塊使 Python 語(yǔ)言擁有全部的正則表達(dá)式功能。

1.2要知道的各種用法

模式字符串使用特殊的語(yǔ)法來(lái)表示一個(gè)正則表達(dá)式

字母和數(shù)字表示他們自身。一個(gè)正則表達(dá)式模式中的字母和數(shù)字匹配同樣的字符串。多數(shù)字母和數(shù)字前加一個(gè)反斜杠時(shí)會(huì)擁有不同的含義。標(biāo)點(diǎn)符號(hào)只有被轉(zhuǎn)義時(shí)才匹配自身,否則它們表示特殊的含義。反斜杠本身需要使用反斜杠轉(zhuǎn)義。

由于正則表達(dá)式通常都包含反斜杠,所以你最好使用原始字符串來(lái)表示它們。模式元素(如 r'/t',等價(jià)于'//t')匹配相應(yīng)的特殊字符。

下表列出了正則表達(dá)式模式語(yǔ)法中的特殊元素。如果你使用模式的同時(shí)提供了可選的標(biāo)志參數(shù),某些模式元素的含義會(huì)改變。

當(dāng)然這些用法很多,待會(huì)會(huì)給出經(jīng)常使用到的用法,多試試就能理解了。

模式

字符類(lèi)

特殊字符類(lèi)

1.3re.match函數(shù)
  re.match 嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回none。
  re.match(pattern, string, flags = 0)
  pattern 正則表達(dá)式
  string 匹配的字符串
  flags 標(biāo)志位,用來(lái)控制匹配方式,下文會(huì)講
  直接上程序:    
import string,re
r = "abc" #正則表達(dá)式
if re.match(r,"abc"): #匹配
print 'done'
else:
print 'defeat'
結(jié)果:
  done
可以根據(jù)上面各表給出的用法,多練練:    
import string,re
r = "a.c" #正則表達(dá)式 . 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符。
if re.match(r,"abc"):
print re.match(r,"abc")
print 'done'
else:
print 'defeat'
結(jié)果:
<_sre.SRE_Match object at 0x01dd6158>
done
  注意這里不是顯示匹配成功的字符串,re.match() 返回的是一個(gè)對(duì)象,不成功返回的是none.
  我們可以通過(guò)group(num)或groups()匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。 

程序:       
import string,re
r = "a.c"
if re.match(r,"abc"):
line = re.match(r,"abc")
print line.group()
else:
print 'defeat'

結(jié)果:

  abc

1.3re.search函數(shù)

re.search() 掃描整個(gè)字符串并返回第一個(gè)成功的匹配
  re.search(pattern, string, flags=0)
  pattern 正則表達(dá)式
  string 匹配的字符串
  flags 標(biāo)志位,用于控制匹配方式
  和re.match()一樣,匹配成功re.search方法返回一個(gè)匹配的對(duì)象,否則返回None。
  直接上程序:    
import string,re
r = "abc"
s = 'aacawcabc'
if re.search(r,s):
line = re.search(r,s)
print line.group()
結(jié)果:
abc
注意:
re.match()和re.search()的區(qū)別:
  re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None;而re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。
1.4re.sub函數(shù)

  re.sub()函數(shù)用于替換匹配項(xiàng)。

  re.sub(pattern,repl,string,max = 0)

  pattern 正則表達(dá)式

  repl 替換 項(xiàng)

  string 匹配的字符串

  count 替換的最大次數(shù) 缺省值是0 表示替換所有的匹配

  返回的字符串是在字符串中用 RE 最左邊不重復(fù)的匹配來(lái)替換。如果模式?jīng)]有發(fā)現(xiàn),字符將被沒(méi)有改變地返回。

  程序:    
import string,re
pattern = '\d'
repl = "!"
s = 'abcdefg'
line = re.sub(pattern,repl,s)
print line

結(jié)果:

!!!!!!!!!abcdefg

1.5正則表達(dá)式修飾符 - 可選標(biāo)志

我們來(lái)說(shuō)說(shuō)什么是標(biāo)志位:

正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過(guò)按位 OR(|) 它們來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:

程序:     
import string,re
pattern = '[Aa][Bb][Cc][Dd]'
s = 'AbCd'
if re.match(pattern,s):
line = re.match(pattern,s)
print line.group()

結(jié)果:

AbCd

上面程序可以通過(guò)選擇標(biāo)志位來(lái)實(shí)現(xiàn):    
import string,re
pattern = 'abcd'
s = 'AbCd'
if re.match(pattern,s,re.I):
line = re.match(pattern,s,re.I)
print line.group()
結(jié)果;
AbCd
1.6re.compile函數(shù)
  使用re的一般步驟是先使用re.compile()函數(shù),將正則表達(dá)式的字符串形式編譯為Pattern實(shí)例,然后使用Pattern實(shí)例處理文本并獲得匹配結(jié)果(一個(gè)Match實(shí)例),最后使用Match實(shí)例獲得信息,進(jìn)行其他的操作。
程序:    
import string,re
pattern = re.compile('\d+')
s = 'aabbccdd'
if pattern.match(s):
line = pattern.match(s)
print line.group()
結(jié)果:
11223344


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }