国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 正則表達(dá)式

FrancisSoung / 1875人閱讀

摘要:今天就專門看看正則表達(dá)式。下面是一個(gè)正則表達(dá)式最簡(jiǎn)單的使用例子。這個(gè)例子使用了正則表達(dá)式模塊的函數(shù),它會(huì)返回所有符合模式的列表。查詢標(biāo)志讓正則表達(dá)式具有不同的行為。,按給定正則表達(dá)式分割字符串。,正則表達(dá)式中捕獲組的數(shù)量。

最近研究Python爬蟲,很多地方用到了正則表達(dá)式,但是沒好好研究,每次都得現(xiàn)查文檔。今天就專門看看Python正則表達(dá)式。本文參考了官方文檔 re模塊。

模式

首先正則表達(dá)式的語法我就不說了,這玩意倒是不算難,用的時(shí)候現(xiàn)查就行了——正則表達(dá)式_百度百科。

在很多編程語言中,由于有轉(zhuǎn)義字符這么一種東西的存在,導(dǎo)致正則表達(dá)式需要使用兩個(gè)斜杠來處理。如果編程語言支持原始字符串,那么就不需要兩個(gè)斜杠了。在Python中,字符串前面添加字母r即可把字符串變成原始字符串。

下面是一個(gè)正則表達(dá)式最簡(jiǎn)單的使用例子。我們查找所有以字母F開頭的單詞,不論大小寫。這個(gè)例子使用了正則表達(dá)式模塊的re.findall函數(shù),它會(huì)返回所有符合模式的列表。

import re

text = "fuck shit it make she forest"

results = re.findall(r"[Ff]w+", text)
print(results)

如果某一個(gè)模式需要經(jīng)常使用,我們可以把它編譯為模式對(duì)象。然后從模式對(duì)象上調(diào)用各種正則查詢方法。這樣做的優(yōu)點(diǎn)是:由于模式已經(jīng)編譯了,所以后續(xù)的查詢速度會(huì)更快。

pattern = re.compile(r"[Ff]w+")
print(pattern.findall(text))
查詢標(biāo)志

大部分查詢方法還可以接受一個(gè)查詢標(biāo)志參數(shù)。查詢標(biāo)志讓正則表達(dá)式具有不同的行為。下面一一說明。

標(biāo)志 作用
re.A、re.ASCII 以ASCII模式查詢,默認(rèn)是Unicode模式
re.DEBUG 顯示編譯表達(dá)式的調(diào)試信息
re.I、re.IGNORECASE 忽略字母的大小寫
re.L、re.LOCALE 以區(qū)域敏感方式查詢匹配
re.M、re.MULTILINE 開啟多行模式,開啟之后行邊界符^$會(huì)匹配每行的開始和結(jié)束,而不是整個(gè)字符串的開始和結(jié)束
re.S、re.DOTALL 使用此標(biāo)志,會(huì)讓點(diǎn)符號(hào)匹配所有字符,默認(rèn)情況下點(diǎn)符號(hào)會(huì)匹配換行符以外的符號(hào)
re.X、re.VERBOSE 開啟啰嗦模式,可以在寫正則表達(dá)式的時(shí)候添加注釋

下面是啰嗦模式的例子,來自Python官方文檔。

a = re.compile(r"""d +  # the integral part
                   .    # the decimal point
                   d *  # some fractional digits""", re.X)
b = re.compile(r"d+.d*")
查詢方法

查詢方法有兩種形式,第一種是re模塊的函數(shù),這些函數(shù)需要接受一個(gè)模式字符串。第二種就是從編譯好的模式對(duì)象上調(diào)用,這樣不需要模式字符串了。基本上大部分方法都有這兩種形式,所以這里只需要介紹一種形式。

re.search(pattern, string, flags=0)方法查詢字符串,返回第一個(gè)結(jié)果的匹配對(duì)象。不管有多少個(gè)滿足條件的字符串,這個(gè)方法之返回第一個(gè)。如果查詢不到,就返回None。

re.match(pattern, string, flags=0)查詢字符串,當(dāng)字符串的前面一部分和模式匹配的時(shí)候,會(huì)返回相應(yīng)的匹配對(duì)象。如果不匹配,那么返回None。需要注意即使開啟了多行模式,這個(gè)方法也只查詢字符串最前面的一部分,不會(huì)查詢每行的前面。

re.fullmatch(pattern, string, flags=0),如果整個(gè)字符串和模式匹配,返回相應(yīng)的匹配對(duì)象。否則返回None。

re.split(pattern, string, maxsplit=0, flags=0),按給定正則表達(dá)式分割字符串。

re.findall(pattern, string, flags=0),最常用的方法,返回一個(gè)列表,包含所有匹配模式的字符串。

re.finditer(pattern, string, flags=0),和findall方法類似,不過返回的是一個(gè)迭代器。

re.sub(pattern, repl, string, count=0, flags=0),將字符串中匹配模式的部分使用repl替換,返回替換后的字符串。

re.subn(pattern, repl, string, count=0, flags=0),和sub方法類似,不過返回元組(新字符串,替換的數(shù)量)

re.purge(),清除正則表達(dá)式緩存。

在已編譯好的正則表達(dá)式對(duì)象上還有以下幾個(gè)屬性。

flags,正則表達(dá)式的所有標(biāo)志,包括flags參數(shù)設(shè)置的,compile方法編譯傳入的,以及正則表達(dá)式中本身的標(biāo)志。

groups,正則表達(dá)式中捕獲組的數(shù)量。

pattern,返回模式字符串。

groupindex,返回(?P)形式的命名組和組編號(hào)鍵值對(duì)組成的字典。

匹配對(duì)象

上面提到的很多方法都返回匹配對(duì)象。匹配對(duì)象包含了一些方法和屬性,方便我們進(jìn)行查詢。

最常用的就是group函數(shù),它會(huì)返回指定組對(duì)應(yīng)的字符串。下面的例子就查詢了給定數(shù)據(jù)中的數(shù)據(jù)量和每頁的條數(shù)。第0組返回整個(gè)匹配,第1組返回第一個(gè)匹配,以此類推……也可以采用命名組的方式。

text = "總共20條數(shù)據(jù) 每頁5條"
pattern = re.compile(r"總共(?Pd+)條數(shù)據(jù)s+每頁(?Pd+)條")

match = pattern.match(text)
print(match.group(0))

另一個(gè)比較常用的函數(shù)就是groups(default=None),它返回所有組組成的元組。如果有的組沒有匹配到字符串,就會(huì)顯示為None,這時(shí)候可以使用default參數(shù)指定默認(rèn)值。

text = "總共20條數(shù)據(jù) 每頁5條"
pattern = re.compile(r"總共(?Pd+)條數(shù)據(jù)s+每頁(?Pd+)條")

match = pattern.match(text)

print(match.groups())

# 結(jié)果
# ("20", "5")

groupdict(default=None)返回組名和字符串組成的字典。還是上面的例子。

print(match.groupdict())
# {"total": "20", "per": "5"}

startend函數(shù)返回給定組的在字符串的起始和結(jié)束索引,如果對(duì)應(yīng)的組沒有任何匹配,則返回-1。下面的例子來自Python官方文檔,從電子郵件地址中去除remove_this。

>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():]
"tony@tiger.net"

match.span([group])返回給定組的起始索引和結(jié)束索引組成的元組。

以上就是Python正則表達(dá)式的大部分內(nèi)容了,靈活使用這些知識(shí),可以獲得強(qiáng)大的功能。關(guān)于如何巧用,就看大家的智慧了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38581.html

相關(guān)文章

  • Python基礎(chǔ)教程:-正則達(dá)式基本語法以及re模塊

    摘要:正則表達(dá)式關(guān)閉或可選標(biāo)志。如果所含正則表達(dá)式,以表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。否則指的是八進(jìn)制字符碼的表達(dá)式。 正則表達(dá)式是個(gè)很牛逼的東西,不管是在javascript,還是在Python web開發(fā)(http://www.maiziedu.com/course/python-px...)中,我們都會(huì)遇到正則表達(dá)式,雖然javascript和Python的正則表達(dá)式區(qū)別不大...

    y1chuan 評(píng)論0 收藏0
  • python 正則達(dá)式

    摘要:正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器。正則表達(dá)式匹配如果直接給出字符,就是精確匹配。模塊提供模塊,包含所有正則表達(dá)式的功能。分組除了簡(jiǎn)單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能。 正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器。它的設(shè)計(jì)思想是用一種描述性的語言來給字符串定義一個(gè)規(guī)則,凡是符合規(guī)則的字符串,我們就認(rèn)為它匹配了,否則,該字符串就是不合法的。 showImg...

    孫淑建 評(píng)論0 收藏0
  • PythonPython正則達(dá)式使用指導(dǎo)

    摘要:反斜杠的困擾與大多數(shù)編程語言相同,正則表達(dá)式里使用作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。文本中正則表達(dá)式結(jié)束搜索的索引。以元組形式返回全部分組截獲的字符串。用于指定最大分割次數(shù),不指定將全部分割。 1. 正則表達(dá)式基礎(chǔ) 1.1. 簡(jiǎn)單介紹 正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語法以及一個(gè)獨(dú)立的處理引擎,效率上可能不如str自帶的方法...

    nihao 評(píng)論0 收藏0
  • Python正則達(dá)式保姆式教學(xué),帶你精通大名鼎鼎的正則

    摘要:今天來給大家分享一份關(guān)于比較詳細(xì)的正則表達(dá)式寶典,學(xué)會(huì)之后你將對(duì)正則表達(dá)式達(dá)到精通的狀態(tài)。正則表達(dá)式是用在方法當(dāng)中,大多數(shù)的字符串檢索都可以通過來完成。導(dǎo)入模塊在使用正則表達(dá)式之前,需要導(dǎo)入模塊。 ...

    tulayang 評(píng)論0 收藏0
  • Python正則達(dá)式很難?一篇文章搞定他,不是我吹!

    摘要:正則表達(dá)式語法字符與字符類特殊字符以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義字符類包含在中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒有指定量詞則只會(huì)匹配其中的一個(gè)。 1. 正則表達(dá)式語法 1.1 字符與字符類 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義 2 字符類 1. 包含在[]中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒有指...

    dcr309duan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

FrancisSoung

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<