亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python的re模塊使用方法詳解

系統 1580 0

一、正則表達式的特殊字符介紹

            
正則表達式
^      匹配行首                  
$      匹配行尾                  
.      任意單個字符          
[]     匹配包含在中括號中的任意字符
[^]     匹配包含在中括號中的字符之外的字符
[-]     匹配指定范圍的任意單個字符
?     匹配之前項的1次或者0次
+      匹配之前項的1次或者多次
*      匹配之前項的0次或者多次
{n}     匹配之前項的n次
{m,n}    匹配之前項最大n次,最小m次
{n,}    配置之前項至少n次
          

二、re模塊的方法介紹

1、匹配類方法

a、findall方法

            
# findall方法,該方法在字符串中查找模式匹配,將所有的匹配字符串以列表的形式返回,如果文本中沒有任何字符串匹配模式,則返回一個空的列表,
# 如果有一個子字符串匹配模式,則返回包含一個元素的列表,所以,無論怎么匹配,我們都可以直接遍歷findall返回的結果而不會出錯,這對工程師
# 編寫程序來說,減少了異常情況的處理,代碼邏輯更加簡潔
          
            
# re.findall() 用來輸出所有符合模式匹配的子串
 
re_str = "hello this is python 2.7.13 and python 3.4.5"
 
pattern = "python [0-9]\.[0-9]\.[0-9]"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# ['python 2.7.1', 'python 3.4.5']
 
pattern = "python [0-9]\.[0-9]\.[0-9]{2,}"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# ['python 2.7.13']
 
 
pattern = "python[0-9]\.[0-9]\.[0-9]{2,}"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# []
 
# re.findall() 方法,返回一個列表,如果匹配到的話,列表中的元素為匹配到的子字符串,如果沒有匹配到,則返回一個空的列表
 
re_str = "hello this is python 2.7.13 and Python 3.4.5"
 
pattern = "python [0-9]\.[0-9]\.[0-9]"
res = re.findall(pattern=pattern,string=re_str,flags=re.IGNORECASE)
print(res)
 
# ['python 2.7.1', 'Python 3.4.5']
 
# 設置標志flags=re.IGNORECASE,意思為忽略大小寫
          

b、編譯的方式使用正則表達式

            
# 我們一般采用編譯的方式使用python的正則模塊,如果在大量的數據量中,編譯的方式使用正則性能會提高很多,具體讀者們可以可以實際測試
re_str = "hello this is python 2.7.13 and Python 3.4.5"
re_obj = re.compile(pattern = "python [0-9]\.[0-9]\.[0-9]",flags=re.IGNORECASE)
res = re_obj.findall(re_str)
print(res)
          

c、match方法

            
# match方法,類似于字符串中的startwith方法,只是match應用在正則表達式中更加強大,更富有表現力,match函數用以匹配字符串的開始部分,如果模式
# 匹配成功,返回一個SRE_Match類型的對象,如果模式匹配失敗,則返回一個None,因此對于普通的前綴匹配,他的用法幾乎和startwith一模一樣,例如我
# 們要判斷data字符串是否以what和是否以數字開頭
          
            
s_true = "what is a boy"
s_false = "What is a boy"
re_obj = re.compile("what")
 
print(re_obj.match(string=s_true))
# <_sre.SRE_Match object; span=(0, 4), match='what'
 
print(re_obj.match(string=s_false))
# None
 
s_true = "123what is a boy"
s_false = "what is a boy"
 
re_obj = re.compile("\d+")
 
print(re_obj.match(s_true))
# <_sre.SRE_Match object; span=(0, 3), match='123'>
 
print(re_obj.match(s_true).start())
# 0
print(re_obj.match(s_true).end())
# 3
print(re_obj.match(s_true).string)
# 123what is a boy
print(re_obj.match(s_true).group())
# 123
 
 
print(re_obj.match(s_false))
# None
          

d、search方法

            
# search方法,模式匹配成功后,也會返回一個SRE_Match對象,search方法和match的方法區別在于match只能從頭開始匹配,而search可以從
# 字符串的任意位置開始匹配,他們的共同點是,如果匹配成功,返回一個SRE_Match對象,如果匹配失敗,返回一個None,這里還要注意,
# search僅僅查找第一次匹配,也就是說一個字符串中包含多個模式的匹配,也只會返回第一個匹配的結果,如果要返回所有的結果,最簡單
# 的方法就是findall方法,也可以使用finditer方法
          

e、finditer方法

            
# finditer返回一個迭代器,遍歷迭代器可以得到一個SRE_Match對象,比如下面的例子
          
            
re_str = "what is a different between python 2.7.14 and python 3.5.4"
 
re_obj = re.compile("\d{1,}\.\d{1,}\.\d{1,}")
 
for i in re_obj.finditer(re_str):
  print(i)
 
# <_sre.SRE_Match object; span=(35, 41), match='2.7.14'>
# <_sre.SRE_Match object; span=(53, 58), match='3.5.4'>
          

2、修改類方法介紹

a、sub方法

            
# re模塊sub方法類似于字符串中的replace方法,只是sub方法支持使用正則表達式,所以,re模塊的sub方法使用場景更加廣泛
          
            
re_str = "what is a different between python 2.7.14 and python 3.5.4"
 
re_obj = re.compile("\d{1,}\.\d{1,}\.\d{1,}")
 
print(re_obj.sub("a.b.c",re_str,count=1))
# what is a different between python a.b.c and python 3.5.4
 
print(re_obj.sub("a.b.c",re_str,count=2))
# what is a different between python a.b.c and python a.b.c
 
print(re_obj.sub("a.b.c",re_str))
# what is a different between python a.b.c and python a.b.c
          

b、split方法

            
# re模塊的split方法和python字符串中的split方法功能是一樣的,都是將一個字符串拆分成子字符串的列表,區別在于re模塊的split方法能夠
# 使用正則表達式
# 比如下面的例子,使用. 空格 : !分割字符串,返回的是一個列表
          
            
re_str = "what is a different between python 2.7.14 and python 3.5.4 USA:NewYork!Zidan.FRA"
 
re_obj = re.compile("[. :!]")
 
print(re_obj.split(re_str))
# ['what', 'is', 'a', 'different', 'between', 'python', '2', '7', '14', 'and', 'python', '3', '5', '4', 'USA', 'NewYork', 'Zidan', 'FRA']
          

c、大小寫不敏感設置

            
# 3、大小寫不敏感
 
# re.compile(flags=re.IGNORECASE)
          

d、非貪婪匹配

            
# 4、非貪婪匹配,貪婪匹配總是匹配到最長的那個字符串,相應的,非貪婪匹配是匹配到最小的那個字符串,只需要在匹配字符串的時候加一個?即可
 
# 下面的例子,注意兩個.
s = "Beautiful is better than ugly.Explicit is better than impliciy."
 
 
re_obj = re.compile("Beautiful.*y\.")
 
print(re_obj.findall(s))
# ['Beautiful is better than ugly.Explicit is better than implicit.']
 
re_obj = re.compile("Beautiful.*?\.")
 
print(re_obj.findall(s))
# ['Beautiful is better than ugly.']
          

e、在正則匹配字符串中加一個小括號,會有什么的效果呢?

如果是要配置一個真正的小括號,那么就需要轉義符,下面的例子大家仔細看下,注意下search方法返回的對象的group(1)這個方法是報錯的

            
import re
s = "=aa1239d&&& 0a ()--"
 
# obj = re.compile("\(\)")
# search
# rep = obj.search(s)
# print(rep)
# <_sre.SRE_Match object; span=(15, 17), match='()'>
# print(rep.group(1))
# IndexError: no such group
# print(rep.group())
# ()
          
            
# findall
 
rep = obj.findall(s)
print(rep)
# ['()']
          

如果是要返回括號中匹配的字符串中,則該小括號不需要轉義符,findall方法返回的是小伙好中匹配到的字符串,search.group()方法的返回的整個模式匹配到字符串,search.group(1)這個是匹配第一個小括號中的模式匹配到的字符串,search.group(2)這個是匹配第二個小括號中的模式匹配到的字符串,以此類推

            
s = "=aa1239d&&& 0a ()--"
rep = re.compile("\w+(&+)")
 
print(rep.findall(s))
# ['&&&']
print(rep.search(s).group())
# aa1239d&&&
print(rep.search(s).group(1))
# &&&
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费观看黄色网 | 亚洲一区二区三区免费观看 | 久久中文字幕久久久久 | 欧美一级毛片免费高清aa | 天天摸夜夜添久久精品麻豆 | 天天干天天拍天天射 | 刺激videoschina偷拍 | 四虎在线免费观看 | 国产一区二区在线观看免费 | 久久伦理影院 | 亚洲欧美日韩中文无线码 | yellow中文字幕久久网 | 97影院论理手机在线观看 | 草久久免费视频 | 国产成人短视频 | 狠狠操操 | 亚洲免费片 | 久久亚洲国产成人影院 | 欧美精品国产日韩综合在线 | 日韩一区二区视频在线观看 | 亚洲欧洲一区二区三区在线观看 | 蜜桃破解版免费看nba | 国产精品免费观看视频 | 久久伦理影院 | 天天操天天摸天天舔 | 国产一区二区免费在线观看 | 999国产视频| 久久精品国产99国产精品澳门 | 亚洲国产精品久久久久婷婷软件 | 欧美亚洲综合另类型色妞 | 久久草视频 | 福利影院在线播放 | 日韩中文字幕在线播放 | 天天操天天操天天干 | 亚洲一级毛片视频 | 久久久久综合中文字幕 | 视频福利一区 | 久久久伊人影院 | 亚洲最新在线 | 亚洲国产天堂在线mv网站 | 久久综合色之久久综合 |