熱線電話:13121318867

登錄
首頁精彩閱讀Python正則表達式之基礎篇
Python正則表達式之基礎篇
2017-08-09
收藏

Python正則表達式之基礎篇

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

其他編程語言中也有正則表達式的概念,區別只在于不同的編程語言實現支持的語法數量不同。

它擁有自己獨特的語法以及一個獨立的處理引擎,在提供了正則表達式的語言里,正則表達式的語法都是一樣的。

下圖展示了使用正則表達式進行匹配的流程:

1.1介紹

正則表達式并不是Python的一部分。正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。得益于這一點,在提供了正則表達式的語言里,正則表達式的語法都是一樣的,區別只在于不同的編程語言實現支持的語法數量不同;但不用擔心,不被支持的語法通常是不常用的部分。

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

1.2要知道的各種用法

模式字符串使用特殊的語法來表示一個正則表達式

字母和數字表示他們自身。一個正則表達式模式中的字母和數字匹配同樣的字符串。多數字母和數字前加一個反斜杠時會擁有不同的含義。標點符號只有被轉義時才匹配自身,否則它們表示特殊的含義。反斜杠本身需要使用反斜杠轉義。

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

下表列出了正則表達式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標志參數,某些模式元素的含義會改變。

當然這些用法很多,待會會給出經常使用到的用法,多試試就能理解了。

模式

字符類

特殊字符類

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

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

結果:

  abc

1.3re.search函數

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

  re.sub()函數用于替換匹配項。

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

  pattern 正則表達式

  repl 替換 項

  string 匹配的字符串

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

  返回的字符串是在字符串中用 RE 最左邊不重復的匹配來替換。如果模式沒有發現,字符將被沒有改變地返回。

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

結果:

!!!!!!!!!abcdefg

1.5正則表達式修飾符 - 可選標志

我們來說說什么是標志位:

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

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

結果:

AbCd

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


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢