一、簡單介紹
正規表示式是一種小型的、高度專業化的程式語言,並不是python中特有的,是許多程式語言中基礎而又重要的一部分。在python中,主要透過re模組來實現。
正規表示式模式被編譯成一系列的字節碼,然後由用c編寫的匹配引擎執行。那麼正規表示式通常有哪些使用場景呢?
例如為想要匹配的對應字串集指定規則;
該字串集可以是包含e-mail位址、Internet位址、電話號碼,或是根據需求自訂的一些字串集;
當然也可以去判斷一個字串集是否符合我們定義的匹配規則;
找到字串中符合該規則的部分內容;
修改、切割等一系列的文字處理;
......
二、特殊符號和字元(元字元 )
這裡介紹常見的一些元字符,它給予正規表示式強大的功能和靈活性。表2-1列出了比較常見的符號和字元。
三、正規表示式
1、使用compile()函數編譯正規表示式
由於python程式碼最終會被翻譯成字節碼,然後在解釋器上執行。所以對於我們程式碼中常要用到的一些正規表示式進行預編譯,執行起來會更方便。
re模組中的大多數函數和已經編譯的正規表示式物件和正規符合物件的方法同名並且具有相同的功能。
範例:
>>> import re >>> r1 = r'bugs' # 字符串前加"r"反斜杠就不会被任何特殊方式处理,这是个习惯,虽然这里没用到 >>> re.findall(r1, 'bugsbunny') # 直接利用re模块进行解释性地匹配 ['bugs'] >>> >>> r2 = re.compile(r1) # 如果r1这个匹配规则你会经常用到,为了提高效率,那就进行预编译吧 >>> r2 # 编译后的正则对象 <_sre.SRE_Pattern object at 0x7f5d7db99bb0> >>> >>> r2.findall('bugsbunny') # 访问对象的findall方法得到的匹配结果与上面是一致的 ['bugs'] # 所以说,re模块中的大多数函数和已经编译的正则表达式对象和正则匹配对象的方法同名并且具有相同的功能
re.compile()函數也接受可選的標誌參數,常用來實作不同的特殊功能和語法變更。這些標誌也可以作為參數適用於大多數re模組函數。這些標誌可以用運算元(|)合併。
範例:
>>> import re >>> r1 = r'bugs' >>> r2 = re.compile(r1,re.I) # 这里选择的是忽略大小写的标志,完整的是re.IGNORECASE,这里简写re.I >>> r2.findall('BugsBunny') ['Bugs'] # re.S 使.匹配换行符在内的所有字符 # re.M 多行匹配,英雄^和$ # re,X 用来使正则匹配模式组织得更加清晰
完整的標誌參數清單和用法可以參考相關官方文件。
2、使用正規表示式
re模組提供了一個正規表示式引擎的介面,以下具體介紹一些常用的函數和方法。
符合物件以及group()和groups()方法
當處理正規表示式時,除了正規表示式物件之外,還有一個物件類型:符合物件。這些是成功呼叫 match()或search()傳回的物件。配對物件有兩個主要的方法:group()和groups()。
group()要麼返回整個匹配對象,要麼根據要求返回特定子群組。 groups()則只傳回一個包含唯一或全部子群組的元組。如果沒有子群組的要求,那麼當group()仍然傳回整個符合時,groups會傳回一個空元群組。下面一些函數範例會示範到此方法。
使用 match()方法來匹配字串
match()函數從字串的起始部分對模式進行比對。如果匹配成功,就回傳一個匹配對象;如果匹配失敗,就回傳 None,匹配對象的方法 group()方法就能夠用來顯示那個成功的匹配。
範例如下:
>>> m = re.match('bugs', 'bugsbunny') # 模式匹配字符串 >>> if m is not None: # 如果匹配成功,就输出匹配内容 ... m.group() ... 'bugs' >>> m <_sre.SRE_Match object at 0x7f5d7da1f168> # 确认返回的匹配对象
使用search()在一個字串中尋找模式
search()的工作方式与match()完全一致,不同之处在于search()是对给定正则表达式模式搜索第一次出现的匹配情况。简单来说,就是在任意位置符合都能匹配成功,不仅仅是字符串的起始部分,这就是与match()函数的区别,用脚指头想想search()方法使用的范围更多更广。
示例:
>>> m = re.search('bugs', 'hello bugsbunny') >>> if m is not None: ... m.group() ... 'bugs'
使用findall()和finditer()查找每一次出现的位置
findall()是用来查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表;finditer()与findall()不同的地方是返回一个迭代器,对于每一次匹配,迭代器都返回一个匹配对象。
>>> m = re.findall('bugs', 'bugsbunnybugs') >>> m ['bugs', 'bugs'] >>> m = re.finditer('bugs', 'bugsbunnybugs') >>> m.next() # 迭代器用next()方法返回一个匹配对象 <_sre.SRE_Match object at 0x7f5d7da71a58> # 匹配用group()方法显示出来 >>> m.next().group() 'bugs'
使用sub()和subn()搜索与替换
都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换。sub()返回一个用来替换的字符串,可以定义替换次数,默认替换所有出现的位置。subn()和sub()一样,但subn()还返回一个表示替换的总是,替换后的字符串和表示替换总数一起作为一个拥有两个元素的元组返回。
示例:
>>> r = 'a.b' >>> m = 'acb abc aab aac' >>> re.sub(r,'hello',m) 'hello abc hello aac' >>> re.subn(r,'hello',m) ('hello abc hello aac', 2)
字符串也有一个replace()方法,当遇到一些模糊搜索替换的时候,就需要更为灵活的sub()方法了。
使用split()分割字符串
同样的,字符串中也有split(),但它也不能处理正则表达式匹配的分割。在re模块中,分居正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表。
示例:
>>> s = '1+2-3*4' >>> re.split(r'[\+\-\*]',s) ['1', '2', '3', '4']
有时在匹配的时候我们只想提取一些想要的信息或者对提取的信息作一个分类,这时就需要对正则匹配模式进行分组,只需要加上()即可。
示例:
>>> m = re.match('(\w{3})-(\d{3})','abc-123') >>> m.group() # 完整匹配 'abc-123' >>> m.group(1) # 子组1 'abc' >>> m.group(2) # 子组2 '123' >>> m.groups() # 全部子组 ('abc', '123')
由以上的例子可以看出,group()通常用于以普通方式显示所有的匹配部分,但也能用于获取各个匹配的子组。可以使用groups()方法来获取一个包含所有匹配字符串的元组。
以上是python模組之re正規表示式詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。