程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python正則表達式講解

編輯:Python

導語

由於日常開發場景中經常涉及到關於正則匹配,比如設備采集信息,篩選配置文件,過濾相關網頁元素等,所有針對Python中正則匹配的Re模塊,需要總結和梳理的地方挺多。這篇文章主要是歸納平時會經常使用到的一些函數,以及在使用過程中會遇到的坑。

正則表達式

正則匹配的使用心得:

  • 可以將一大批數據進行預處理,去除掉一些多余的符號,比如換行,如果出現多個空格,可以換成單個空格。
  • 在獲取數據進行處理時,盡可能獲取指定需要的數據,減少其他數據的干擾,同時也能提高傳輸的效率;
  • 可以設置起始符和終結符用於篩選多個子元素

關於正則表達式語法,不再贅述,可以參考網上的文檔,這裡具體不做總結;

Re模塊

re模塊是Python用來處理正則表達式匹配操作的模塊。

Re模塊常用函數:

re.search(pattern, string, flags=0)
import re
text= "Hello, World!"
re.search("[A-Z]", text)

備注:

  • pattern為正則表達式,string為需要匹配的字符串,flags為正則表達式的標志;
  • search函數掃描整個字符串找到匹配正則表達式的第一個位置,並且返回相應的匹配對象, 如果沒匹配到則返回None;

re.match(pattern, string, flags=0)
re.fullmatch(pattern, string, flags=0)

import re
text="Hello,World"
re.match("[a-z]", text)
re.fullmatch("\S+", text)

備注:

  • match函數從開頭開始匹配正則表達式,如果開頭的單個或多個字符匹配到了正則表達式樣式,則返回一個匹配對象,反之,返回None;
  • 注意區分match和search,match函數是檢查字符串開頭,search函數是檢查字符串的任意位置;
  • fullmatch是如果整個string都匹配到正則表達式,返回一個相應的匹配對象,否則返回一個None;

re.split(pattern, string, maxsplit=0, flags=0)

import re
text = "aJ33Sjd3231ssfj22323SSdjdSSSDddss"
re.split("([0-9]+)", text)
re.split("[0-9]+", text)

備注:

  • split函數中使用正則表達式分開string,如果在正則表達式中能檢測到括號,則分割的字符串會保留在列表中;
  • maxsplit,最大的分割次數,分割完剩下的字符串都會全部返回到列表中最後一個元素;

re.findall(pattern, string, flags=0)
re.finditer(pattern, string, flags=0)

import re
text = "aJ33Sjd3231ssfj22323SSdjdSSSDddss"
a = re.findall("[0-9]+", text)
print(a)
b = re.finditer("[0-9]+", text)
for i in b:
print(i.group())

備注:

  • findall()函數,string從左往右進行掃描,匹配正則表達式,將所有匹配到的按順序排列組成列表返回;
  • finditer()函數,string從左往右進行掃描,匹配正則表達式,將結果按照順序排列返回一個迭代器iterator,迭代器中保存了

匹配對象;

re.sub(pattern, repl, string, count=0, flags=0)
re.subn(pattern, repl, string, count=0, flags=0)

text = "aJ33Sjd3231ssfj22323SSdjdSSSDddss"
a = re.sub("[0-9]", "*", text)
b = re.subn("[0-9]", "*", text)
print(a)
print(b)

備注:

  • sub函數使用repl替換string中每一個匹配的結果,然後返回替補的結果,count參數表示替換次數,默認全部替換;
  • subn函數行為sub相同,但是返回一個元組(字符串,替換次數)

Re正則表達式對象

re.compile(pattern, flags=0)

import re
prog = re.compile("\<div[\s\S]*?class=\"([\s\S]*?)\"[\s\S]*?\>")
text = '<div class="tab" >'
prog.search(text)
prog.findall(text)

備注:

  • compile函數可以將正則表達式編譯成一個正則表達式對象,通過對象提供的方法進行匹配搜索;
  • 一般在需要多次使用這個正則表達式的情況下,使用re.compile()和保存這個正則對象以便復用,可以使程序更加高效;
  • 正則表達式對象提供的方法可以參看以上Re常用函數;

Re匹配對象

當常用函數或者正則表達對象匹配搜索返回的_sre.SRE_Match對象則稱為匹配對象

Match.group([gourp1,…])

Match.groups(default=None)
Match.groupdict(default=None)

import re
a = "Hello, World, root"
b = re.search("(\w+), (\w+), (?P<name>\w+)", a)
print(b.group(0))
print(b.group(1))
print(b.groups())
print(b.groupdict())

備注:

  • group方法返回一個或者多個匹配的子組,即括號()中的組合,默認是返回整個匹配;
  • groups方法,返回一個元組,包含所有匹配的子組;
  • groupdict方法,返回一個字典,包含所有的命名子組;

正則表達式的適用范圍還是十分廣泛的,希望這篇文章能對你學習Python有所幫助!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved