欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python正則表達式最詳解

 更新時間:2021年11月04日 08:51:47   作者:(∪.∪ )...zzz  
篇文章主要介紹了Python中正則表達式的詳細解釋,正則表達式是Python學習進階當中的重要內容,需要的朋友可以參考下

一、正則表達式–元字符

re 模塊使 Python 語言擁有全部的正則表達式功能

在這里插入圖片描述

1. 數量詞

# 提取大小寫字母混合的單詞
import re
a = 'Excel 12345Word23456PPT12Lr'
r = re.findall('[a-zA-Z]{3,5}',a)
# 提取字母的數量3個到5個
print(r)
# ['Excel', 'Word', 'PPT']
# 貪婪 與 非貪婪  【Python默認使用貪婪模式】
# 貪婪:'[a-zA-Z]{3,5}'
# 非貪婪:'[a-zA-Z]{3,5}?' 或 '[a-zA-Z]{3}'
# 建議使用后者,不要使用?號,否則你會與下面的?號混淆
# 匹配0次或無限多次 *號,*號前面的字符出現0次或無限次
import re
a = 'exce0excell3excel3'
r = re.findall('excel*',a)
r = re.findall('excel.*',a) # ['excell3excel3']
# excel 沒有l(wèi) 有很多l(xiāng)都可以匹配出來
print(r)
# ['exce', 'excell', 'excel']
# 匹配1次或者無限多次 +號,+號前面的字符至少出現1次
import re
a = 'exce0excell3excel3'
r = re.findall('excel+',a)
print(r)
# ['excell', 'excel']
# 匹配0次或1次  ?號,?號經常用來去重復
import re
a = 'exce0excell3excel3'
r = re.findall('excel?',a)
print(r)
# ['exce', 'excel', 'excel']

2. 字符匹配

在這里插入圖片描述

line = 'xyz,xcz.xfc.xdz,xaz,xez,xec'
r = re.findall('x[de]z', line)
# pattern 是x開始,z結束,含d或e
print(r)
# ['xdz', 'xez']
r = re.findall('x[^de]z', line)
# pattern 是x開始,z結束,不是含d或e
print(r)
# ['xyz', 'xcz', 'xaz']
# \w 可以提取中文,英文,數字和下劃線,不能提取特殊字符
import re
a = 'Excel 12345Word\n23456_PPT12lr'
r = re.findall('\w',a)
print(r)
# ['E', 'x', 'c', 'e', 'l', '1', '2', '3', '4', '5', 'W', 'o', 'r', 'd', '2', '3', '4', '5', '6', '_', 'P', 'P', 'T', '1', '2', 'l', 'r']
# \W 提取特殊字符,空格 \n \t
import re
a = 'Excel 12345Word\n23456_PPT12lr'
r = re.findall('\W',a)
print(r)
# [' ', '\n']

3. 邊界匹配

在這里插入圖片描述

# 限制電話號碼的位置必需是8-11位才能提取
import re
tel = '13811115888'
r = re.findall('^\d{8,11}$',tel)
print(r)
# ['13811115888']

4. 組

# 將abc打成一個組,{2}指的是重復幾次,匹配abcabc
import re
a = 'abcabcabcxyzabcabcxyzabc'
r = re.findall('(abc){2}',a)  # 與
# ['abc', 'abc']
print(r)
r = re.findall('(abc){3}',a)
# ['abc']

5. 匹配模式參數

在這里插入圖片描述

# findall第三參數 re.I忽略大小寫
import re
a = 'abcFBIabcCIAabc'
r = re.findall('fbi',a,re.I)
print(r)
# ['FBI']
# 多個模式之間用 | 連接在一起
import re
a = 'abcFBI\nabcCIAabc'
r = re.findall('fbi.{1}',a,re.I | re.S)
# 匹配fbi然后匹配任意一個字符包括\n
print(r)
# ['FBI\n']

二、方法

re.findall

  • 匹配出字符串中所有 與制定值相關的值
  • 以列表的形式返回
  • 未匹配則返回空列表
import re
re.findall(pattern, string, flags=0)
pattern.findall(string[ , pos[ , endpos]])
import re
line = "111aaabbb222小呼嚕奧利奧"
r = re.findall('[0-9]',line)
print(r)
# ['1', '1', '1', '2', '2', '2']

re.match

  • re.match 嘗試從字符串的起始位置匹配一個模式
  • 如果不是起始位置匹配成功的話,match()就返回none。
re.match(pattern, string, flags=0)
# (標準,要匹配的,標志位)
print(re.match('www','www.xxxx.com'))
print(re.match('www','www.xxxx.com').span())
print(re.match('com','www.xxxx.com'))
<re.Match object; span=(0, 3), match='www'>
(0, 3)
None

group匹配對象

import re
a = 'life is short,i use python,i love python'
r = re.search('life(.*)python(.*)python',a)
print(r.group(0))       # 完整正則匹配 ,life is short,i use python,i love python
print(r.group(1))       # 第1個分組之間的取值 is short,i use 
print(r.group(2))       # 第2個分組之間的取值 ,i love 
print(r.group(0,1,2)) # 以元組形式返回3個結果取值 ('life is short,i use python,i love python', ' is short,i use ', ',i love ')
print(r.groups())       # 返回就是group(1)和group(2) (' is short,i use ', ',i love ')
import re
# .*        表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
# (.*?)     表示"非貪婪"模式,只保存第一個匹配到的子串
# re.M      多行匹配,影響 ^ 和 $
# re.I      使匹配對大小寫不敏感
line = "Cats are smarter than dogs"
matchObj1 = re.match(r'(.*) are (.*?) .*', line,  re.M|re.I)
matchObj2 = re.match(r'(.*) smarter (.*?) .*', line,  re.M|re.I)
matchObj3 = re.match(r'(.*) than (.*)', line,  re.M|re.I)
print(matchObj1)
print(matchObj2)
print(matchObj3)
# <re.Match object; span=(0, 26), match='Cats are smarter than dogs'>
# <re.Match object; span=(0, 26), match='Cats are smarter than dogs'>
# None
if matchObj1:
   print ("matchObj1.group() : ", matchObj1.group())
   print ("matchObj1.group(1) : ", matchObj1.group(1))
   print ("matchObj1.group(2) : ", matchObj1.group(2))
else:
   print ("No match!!")
if matchObj2:
   print ("matchObj2.group() : ", matchObj2.group())
   print ("matchObj2.group(1) : ", matchObj2.group(1))
   print ("matchObj2.group(2) : ", matchObj2.group(2))
else:
   print ("No match!!")
if matchObj3:
   print ("matchObj3.group() : ", matchObj3.group())
   print ("matchObj3.group(1) : ", matchObj3.group(1))
   print ("matchObj3.group(2) : ", matchObj3.group(2))
else:
   print ("No match!!")
# matchObj1.group() :  Cats are smarter than dogs
# matchObj1.group(1) :  Cats
# matchObj1.group(2) :  smarter
# matchObj2.group() :  Cats are smarter than dogs
# matchObj2.group(1) :  Cats are
# matchObj2.group(2) :  than
# matchObj3.group() :  Cats are smarter than dogs
# matchObj3.group(1) :  Cats are smarter
# matchObj3.group(2) :  dogs
import re
# 點 是匹配單個字符
# 星是前面的東西出現0次或無數次
# 點星就是任意字符出現0次或無數次
str = "a b a b"
matchObj1 = re.match(r'a(.*)b', str,  re.M|re.I)
matchObj2 = re.match(r'a(.*?)b', str,  re.M|re.I)
print("matchObj1.group() : ", matchObj1.group())
print("matchObj2.group() : ", matchObj2.group())
# matchObj1.group() :  a b a b
# matchObj2.group() :  a b

re.search

掃描整個字符串并返回第一個成功的匹配。

re.search(pattern, string, flags=0)
import  re
line = "cats are smarter than dogs"
matchObj = re.match(r'dogs',line,re.M|re.I)
matchObj1= re.search(r'dogs',line,re.M|re.I)
matchObj2= re.match(r'(.*) dogs',line,re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")
if matchObj1:
   print ("match --> matchObj1.group() : ", matchObj1.group())
else:
   print ("No match!!")
if matchObj2:
   print ("match --> matchObj2.group() : ", matchObj2.group())
else:
   print ("No match!!")
# No match!!
# match --> matchObj1.group() :  dogs
# match --> matchObj2.group() :  cats are smarter than dogs

re.compile

  • re.compile是將正則表達式轉換為模式對象
  • 這樣可以更有效率匹配。使用compile轉換一次之后,以后每次使用模式時就不用進行轉換

三、檢索和替換

re.sub 替換字符串

re.sub('被替換的','替換成的',a)
# 把FBI替換成BBQ
import re
a = 'abcFBIabcCIAabc'
r = re.sub('FBI','BBQ',a)
print(r)
# 把FBI替換成BBQ,第4參數寫1,證明只替換第一次,默認是0(無限替換)
import re
a = 'abcFBIabcFBIaFBICIAabc'
r = re.sub('FBI','BBQ',a,1)
print(r)
# abcBBQabcCIAabc
# abcBBQabcFBIaFBICIAabc
# 把函數當參數傳到sub的列表里,實現把業(yè)務交給函數去處理,例如將FBI替換成$FBI$
import re
a = 'abcFBIabcFBIaFBICIAabc'
def 函數名(形參):
    分段獲取 = 形參.group()           # group()在正則表達式中用于獲取分段截獲的字符串,獲取到FBI
    return '$' + 分段獲取 + '$'
r = re.sub('FBI',函數名,a)
print(r)

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • python采集博客中上傳的QQ截圖文件

    python采集博客中上傳的QQ截圖文件

    這篇文章主要介紹了python采集博客中上傳的QQ截圖文件,因為文件名包含中文會在某些時候亂碼,例如這件的文件名QQ截圖20120926174732,所以需要采集出來修改掉,需要的朋友可以參考下
    2014-07-07
  • pycharm的debug調試以及異常,Python中錯誤的處理過程

    pycharm的debug調試以及異常,Python中錯誤的處理過程

    這篇文章主要介紹了pycharm的debug調試以及異常,Python中錯誤的處理過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python中CSV文件(逗號分割)實戰(zhàn)操作指南

    Python中CSV文件(逗號分割)實戰(zhàn)操作指南

    CSV文件默認以英文逗號做為列分隔符,換行符作為行分隔符,下面這篇文章主要給大家介紹了關于Python中CSV文件(逗號分割)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Python 反轉字符串(reverse)的方法小結

    Python 反轉字符串(reverse)的方法小結

    這篇文章主要介紹了Python 反轉字符串(reverse)的方法小結,需要的朋友可以參考下
    2018-02-02
  • Python并發(fā):多線程與多進程的詳解

    Python并發(fā):多線程與多進程的詳解

    今天小編就為大家分享一篇關于Python并發(fā):多線程與多進程的詳解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • pycharm如何實現跨目錄調用文件

    pycharm如何實現跨目錄調用文件

    這篇文章主要介紹了pycharm如何實現跨目錄調用文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python實現關鍵路徑和七格圖計算詳解

    Python實現關鍵路徑和七格圖計算詳解

    這篇文章主要為大家詳細介紹了如何利用Python實現關鍵路徑和七格圖計算,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • Python實現圖片轉字符畫的示例

    Python實現圖片轉字符畫的示例

    本篇文章主要介紹了Python實現圖片轉字符畫的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Python matplotlib實現條形統(tǒng)計圖

    Python matplotlib實現條形統(tǒng)計圖

    這篇文章主要為大家詳細介紹了Python matplotlib實現條形統(tǒng)計圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • pytorch: tensor類型的構建與相互轉換實例

    pytorch: tensor類型的構建與相互轉換實例

    今天小編就為大家分享一篇pytorch: tensor類型的構建與相互轉換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論