re 庫(python正則庫)

2021-02-20 客玉京
正則表達式的作用:

正則表達式的優勢是:一行勝千言

python中的正則表達式:

編譯

怎麼在python中使用正則表達式?

簡潔:一組字符串的表達式

編譯:將符合正則表達式語法的字符串轉換成正則表達式特徵

正則表達式的語法

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

正則表達式是由字符和操作符組成。

正則表達式常用操作符操作符說明實例.表示任何單個字符
[]字符集,對單個字符給出取值範圍[abc]表示a、b、 c, [a-z]表示a到z單個字符[^]非字符集, 對單個字符給出排除範圍[^ abc]表示非a或b或c的單個字符*前一個字符0次或無限次擴展abc*表示ab、abc、 abcc、 abccc等+前一個字符1次或無限次擴展abc+表示abc、abcc、 abccc等?前一個字符0次或1次擴展abc?表示ab、abc|左右表達式任意一個abc|def表示abc、def{m}擴展前一個字符m次ab{2}c表示abbc{m,n}擴展前一個字符m至n次(含n)ab{1,2}c表示abc、abbe^匹配字符串開頭^abc表示abc且在一個 字符串的開頭$匹配字符串結尾abc$表示abc且在一個字符串的結尾()分組標記,內部只能使用操作符(abc)表示abe, (abcldef)表示abc、 def\d數字,等價於[0-9]
\w單詞字符,等價於[A-Za-z0-9]

經典正則表達式

正則表達式正則表達式含義^[A-Za-z]+$由26個字母組成的字符串^[A-Za-z0-9]+$由26個字母和數字組成的字符串^-?\d+$整數形式的字符串^[0-9]*[1-9][0-9]*$正整數形式的字符串[1-9]\d{5}中國境內郵政編碼,6位[\u4e00- \u9fa5]匹配中文字符\d{3}-\d{8}|\d{4)}-\d{7)}國內電話號碼,010-68913536(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])IP位址的精確表達式

re庫主要功能函數

函數含義re.search()在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象re.match()從一個字符串的開始位置起匹配正則表達式,返回match對象re.findall()搜索字符串,以列表類型返回全部能匹配的子串re.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型re.finditer()搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象re.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串

re.search()

在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象

re.search(pattern, string, flags=0)

re.search的(flags)常用標記

常用標記說明re.I re.IGNORECASE忽略正則表達式的大小寫,[A‐Z]能夠匹配小寫字符re.M re.MULTILINE正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始re.S re.DOTALL正則表達式中的.操作符能夠匹配所有字符,默認匹配除換行外的所有字符

>>> import re

# 使用search方法,
>>> match = re.search(r'[1-9]\d{5}','BIT 100081')
# 判斷match與否,直接使用if語句判斷
>>> if match:
...     print(match.group(0))
...
100081
>>> match.group()
'100081'

re.match

match()函數從字符串的起始位置開始匹配。如果匹配成功,則返回match對象;否則返回None。

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

>>> import re
# match()函數從字符串的起始位置開始匹配
>>> match = re.match(r'[1-9]\d{5}','BIT 100081')
>>> match.group()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
# 上面的錯誤信息提示顯示匹配為空
# 結合match()函數從字符串的起始位置開始匹配,調整數據
# 將'BIT 100081'調整為'100081 BIT'
>>> match = re.match(r'[1-9]\d{5}','100081 BIT')
>>> if match:
...     print(match.group(0))
...
100081

re.findall()

findall()函數用來搜索字符串,以列表類型返回全部能匹配的子串。

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

>>> import re
# 搜索字符串,以列表類型返回
>>> list = re.findall(r'[1-9]\d{5}','BIT100081 TSU100084')
# 將後面匹配的字符串列印
>>> list
['100081', '100084']

re.split()

將一個字符串按照正則表達式匹配結果進行分割,返回列表類型。

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

>>> import re
# split函數使用表達式去匹配字符串匹配的部分去掉,剩下的作為元素
>>> re.split(r'[1-9]\d{5}','BIT100081 TSU100084')
['BIT', ' TSU', '']
# 可見上結果,分割之後的是一個列表
# 增加maxsplit約束,使得maxsplit=1
>>> re.split(r'[1-9]\d{5}','BIT100081 TSU100084',maxsplit=1)
['BIT', ' TSU100084']

finditer()

搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象

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

>>> import re
# 使用for循環迭代的獲取match的匹配結果
>>> for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
...     if m:
...             print(m.group(0))
...
100081
100084

sub()

在一個字符串中替換所有匹配正則表達式的子串, 返回替換後的字符串.

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

>>> import re
>>> re.sub(r'[1-9]\d{5}','替換','BIT100081 TSU100084')
'BIT替換 TSU替換'
>>> re.sub(r'[1-9]\d{5}','替換郵政編碼','BIT100081 TSU100084')
'BIT替換郵政編碼 TSU替換郵政編碼'

compile()

將正則表達式的字符串形式編譯成正則表達式對象語法:

regex = re.compile(pattern, flags=0)

>>> import re
>>> match = re.search(r'[1-9]\d{5}','BIT100081')
>>> match.group()
'100081'
>>> match = re.search(r'[1-9]\d{5}','YUS100084')
>>> match.group()
'100084'
>>> regex = re.compile(r'[1-9]\d{5}')
>>> match = regex.search('BIT100081')
>>> match.group()
'100081'
>>> match = regex.search('TUS100084')
>>> match.group()
'100084'


re庫函數去掉正則表達式用法函數說明regex.search()在一個字符串中搜索匹配正則表達式的第一個位置, 返回match對象regex.match()從一個字符串的開始位置起匹配正則表達式,返回match對象regex.findall()搜索字符串,以列表類型返回全部能匹配的子串regex.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型regex.fiditer()搜索字符串,返回-個匹配結果的迭代類型,每個迭代元素是match對象regex.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串貪婪匹配和最小匹配

>>> import re
>>> match = re.search(r'P.*N', 'P1N22N333N444N')
>>> match.group(0)
'P1N22N333N444N'
>>> match = re.search(r'P.*?N', 'P1N22N333N444N')
>>> match.group(0)
'P1N'

操作符說明*?前一個字符0次或無限次擴展,最小匹配+?前一個字符1次或無限次擴展,最小匹配??前一個字符0次或1次擴展,最小匹配{m,n}?擴展前一個字符m至n次(含n),最小匹配

相關焦點

  • python re庫的正則表達式學習筆記
    安裝默認已經安裝好了python環境了re庫是python3的核心庫,不需要pip install,直接import就行2.例子import repattern = r'Cookie'sequence = 'Cookie're.match(pattern, sequence)<re.Match object; span=(0, 6), match='Cookie'>re.match()是常用的函數,如果匹配,返回的是
  • Python的內置庫re-1
    正則表達式是一串表示某種規則(模式)的式子,今天我們一起來了解下Python的正則表達式庫re。正則的組成主要分為以下6部分1、元字符.def re_str(strings): partter = re.compile('.')
  • Python re模塊常見函數
    該函數與re.match()函數最大的不同是,re.match()函數從源字符串的開頭進行匹配,而re.search()函數會在全文中進行檢索匹配。示例如下:import repattern1 = "python"string = "abcdpythonfphp345pythonxadi_py"result1 = re.search(pattern1, string)print(result1)print(result1.group())執行結果:
  • wxpy庫+Pyecharts庫:用Python對微信好友進行數據分析
    本文結構:一、前言二、Python庫簡單介紹wxpy庫Pyechats庫re庫jieba庫和collections庫三、分析結果和代碼展示1、數據準備導入需要的Python庫使用wxpy庫登錄微信整合數據2、數據分析微信好友的男女比例微信好友的省份分布微信好友的城市分布微信好友個性籤名分析一、前言之前在某個微信公眾號上貌似看到過一個文章
  • 妙用正則表達式--Python中的re模塊
    Python中的re模塊可以方便地引入正則表達式。利用正則表達式,我們可以對文本內容進行精確快捷地匹配和提取。與Stata相比,正則表達式的元字符是通用的,不同的是函數。re庫中有若干個函數各司其職,在上一篇推文《Python標準庫re:正則表達式》中我們介紹了re庫中的三個常用函數,現在小編將從實用的角度再介紹幾個常用的函數。
  • 萬字長文詳解Python正則表達式及re模塊
    python"pattern = r"[a-z]+\s\w+"  # a-z出現1次到任意次加一個\s加任意字符出現1次到任意次print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>print(re.match(pattern, string2
  • 每個python人都離不開的12個python庫
    如果說python能取得今天的成就,一方面是它簡介的語法,更重要的一方面就是它豐富的第三方庫,可以毫不誇張的說,只要你能想到的任何一個功能模塊,都有對應的python庫,可以說正是因為有了豐富的python庫,python才發展得如此迅速,下面我們來看看python人最常用的20個python
  • 用Python中的re做信息篩選
    re是Python自帶的正則表達式庫文件,為字符串的匹配篩選提供了極大的便利,本文就是利用re來進行日誌文件的信息篩選。首先,簡單來看一下re中的主要函數:1. Compile(pattern, flag):對正則表達式進行編譯,比檢查語法的正確性。flag是編譯的標籤,這裡只介紹DOTALL,表示匹配所有的字符,包括新的行。
  • Python爬蟲--Requests 庫用法大全
    我們使用的是Python 語言來開發爬蟲,其中不得不學習的就是關於 requests 庫的使用了1、安裝 requests 庫因為學習過程使用的是 Python 語言,需要提前安裝 Python ,我安裝的是 Python 3.8,可以通過命令 python --version 查看自己安裝的 Python 版本,建議安裝 Python
  • Python擴展庫安裝與常見問題解決完整指南
    =======================包、庫、模塊是Python中常用的概念。一般來說,模塊指一個包含若干函數定義、類定義或常量的Python源程序文件,庫或包指包含若干模塊並且其中一個文件名為__init__.py的文件夾。對於包含完整功能代碼的單個模塊,叫作庫也可以,例如標準庫re和re模塊這兩種說法都可以。
  • Python常用庫大全
    ptpython – 高級交互式Python解析器, 構建於python-prompt-toolkit 之上。 python-magic- 文件類型檢測的第三方庫 libmagic 的 Python 接口。
  • python推薦 | 面向地學領域的Python庫匯總
    數據處理•NetCDF格式 : netCDF4-python,h5py,h5netcdf,xarray等。除了上述簡單的數據處理庫之外,python還提供了NCO和CDO工具的封裝,pynco和cdo,提供了更多的便捷操作。•Grib格式:xarray,Iris,pygrib等,有些僅支持類Unix系統。
  • 5個奇妙的Python庫
    點擊上方「深度學習愛好者」,選擇加"星標"或「置頂」重磅乾貨,第一時間送達引言Python是一個非常神奇語言,無論我們要做什麼任務,python都有其解決方案,無論它與機器學習,數據可視化Python為各種簡單和困難的任務提供了大量的庫。大多數人都知道類似Pandas,Numpy,Matplotlib,Seaborn,OpenCV,Plotly這樣的庫,還有很多其他在機器學習中使用的庫。但是對於很多小的需求,python同樣有很多奇妙的庫。本文將分享一些在項目中遇到的一些庫,這些庫具有很高的可移植性,對於每個庫我都將用一個代碼段來介紹。
  • python機器學習:常用庫的介紹及安裝
    1、為了學習方便,建議大家安裝Anaconda(由於平臺不讓給出網站連結,所以具體連結直接百度搜一下就可以得到),為什麼建議使用這個軟體呢,因為安裝了這個軟體後本身就自帶了IPython、Numpy、pandas,scikit-learn等庫,不用你去在一步一步的去安裝其他的庫;並且該軟體兼容性不錯,可以在Mac OS, windows和linux上運行,一勞永逸,非常方便。
  • 推薦一些相見恨晚的 Python 庫 「二」
    Python 庫,那麼這篇文章繼續安利一些相見恨晚的庫,旨在讓你在需要的時候能夠派上用場。好了說正事,這篇文章同樣是翻譯自 Awesome Python 的匯總,主要包括:命令行工具庫、Python 版本兼容性庫、計算機視覺庫、並發和並行庫、Python 配置庫、密碼學
  • 2019 必知的 10 大頂級 python 庫
    在本文中,我們將討論一些 python 中的頂級庫,開發人員可以使用這些庫在現有的應用程式中應用、清洗和表示數據,並進行機器學習研究。然而,最重要的一點是它有大量的庫供用戶使用。python 的簡單性吸引了許多開發人員為機器學習創建新的庫。由於有大量的庫,python 在機器學習專家中變得非常流行。所以,這裡要介紹的第一個庫是 TensorFlow。
  • 如何在Visual Studio開發工具安裝python庫
    >技術pythonDjango在python語言開發工具的pycharm中,可以安裝第三方庫。那麼,在Visual Studio開發工具中,如何安裝python第三方庫呢?工具菜單,選擇python,python環境4、打開python環境,選擇python3.8,創建交互式窗口
  • 推薦一些能提高生產力的 Python 庫
    一些回答直接把 awesome-python 貼過來,點讚非常多,當然多歸多,但是裡面很多都是些過期的或者其實沒太有什麼價值的庫,反而會增加了挑選庫的成本。我大體上把一些回答過了一遍,另外結合自己平時了解的內容,稍微對一些基礎生產力庫做了簡單的梳理,在這裡分享給大家。
  • 10個被嚴重忽視的Python自帶庫
    python 的過程中,都會了解到 python 的一個強大的功能在於各種強大的第三方庫函數,大家只需要通過 pip install 即可安裝我們需要的庫函數。但通常我們更關注自己安裝的 python 庫,卻忽略了python自帶的庫或者內置函數。今天就來為大家介紹一下,十大被低估的 python 自帶庫/函數。1.
  • 爬取《The Hitchhiker's Guide to Python!》python進階書並製成pdf
    前幾篇文章我們學習了requests庫和正則,還有個urllib庫,我上篇文章也用了requests庫來教大家去爬那些返回json格式的網頁,挺好玩的