自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python正則表達(dá)式基本應(yīng)用方式解讀

開(kāi)發(fā) 后端
Python正則表達(dá)式的風(fēng)格類(lèi)似于Perl,它是從Python1.5版本開(kāi)始增加的一個(gè)新的模塊,可以幫助我們完成一些比較難的功能。

Python編程語(yǔ)言是一種功能強(qiáng)大的面向?qū)ο蟮闹弊g式計(jì)算機(jī)程序語(yǔ)言。那么如何才能正確的應(yīng)用這一語(yǔ)言來(lái)幫助我們完成一些功能需求的實(shí)現(xiàn)呢?在這里我們就可以先從Python正則表達(dá)式的相關(guān)內(nèi)容開(kāi)始了解。#t#

Python 自1.5版本起增加了re 模塊,它提供 Perl 風(fēng)格的正則表達(dá)式模式。Python 1.5之前版本則是通過(guò) regex 模塊提供 Emecs 風(fēng)格的模式。Emacs 風(fēng)格模式可讀性稍差些,而且功能也不強(qiáng),因此編寫(xiě)新代碼時(shí)盡量不要再使用 regex 模塊,當(dāng)然偶爾你還是可能在老代碼里發(fā)現(xiàn)其蹤影。

就其本質(zhì)而言,Python正則表達(dá)式(或 RE)是一種小型的、高度專(zhuān)業(yè)化的編程語(yǔ)言,(在Python中)它內(nèi)嵌在Python中,并通過(guò) re 模塊實(shí)現(xiàn)。使用這個(gè)小型語(yǔ)言,你可以為想要匹配的相應(yīng)字符串集指定規(guī)則;該字符串集可能包含英文語(yǔ)句、e-mail地址、TeX命令或任何你想搞定的東 西。然後你可以問(wèn)諸如“這個(gè)字符串匹配該模式嗎?”或“在這個(gè)字符串中是否有部分匹配該模式呢?”。你也可以使用 RE 以各種方式來(lái)修改或分割字符串。

正則表達(dá)式模式被編譯成一系列的字節(jié)碼,然後由用 C 編寫(xiě)的匹配引擎執(zhí)行。在高級(jí)用法中,也許還要仔細(xì)留意引擎是如何執(zhí)行給定 RE ,如何以特定方式編寫(xiě) RE 以令生產(chǎn)的字節(jié)碼運(yùn)行速度更快。本文并不涉及優(yōu)化,因?yàn)槟且竽阋殉浞终莆樟似ヅ湟娴膬?nèi)部機(jī)制。

正則表達(dá)式語(yǔ)言相對(duì)小型和受限(功能有限),因此并非所有字符串處理都能用正則表達(dá)式完成。當(dāng)然也有些任務(wù)可以用正則表達(dá)式完成, 不過(guò)最終表達(dá)式會(huì)變得異常復(fù)雜。碰到這些情形時(shí),編寫(xiě) Python 代碼進(jìn)行處理可能反而更好;盡管 Python 代碼比一個(gè)精巧的正則表達(dá)式要慢些,但它更易理解。

簡(jiǎn)單模式

我們將從最簡(jiǎn)單的Python正則表達(dá)式學(xué)習(xí)開(kāi)始。由于正則表達(dá)式常用于字符串操作,那我們就從最常見(jiàn)的任務(wù):字符匹配 下手。

有關(guān)正則表達(dá)式底層的計(jì)算機(jī)科學(xué)上的詳細(xì)解釋?zhuān)ù_定性和非確定性有限自動(dòng)機(jī)),你可以查閱編寫(xiě)編譯器相關(guān)的任何教科書(shū)。

字符匹配

大多數(shù)字母和字符一般都會(huì)和自身匹配。例如,正則表達(dá)式 test 會(huì)和字符串“test”完全匹配。(你也可以使用大小寫(xiě)不敏感模式,它還能讓這個(gè) RE 匹配“Test”或“TEST”;稍後會(huì)有更多解釋。)

這個(gè)規(guī)則當(dāng)然會(huì)有例外;有些字符比較特殊,它們和自身并不匹配,而是會(huì)表明應(yīng)和一些特殊的東西匹配,或者它們會(huì)影響到 RE 其它部分的重復(fù)次數(shù)。本文很大篇幅專(zhuān)門(mén)討論了各種元字符及其作用。

重復(fù)

Python正則表達(dá)式第一件能做的事是能夠匹配不定長(zhǎng)的字符集,而這是其它能作用在字符串上的方法所不能做到的。 不過(guò),如果那是正則表達(dá)式唯一的附加功能的話(huà),那么它們也就不那么優(yōu)秀了。它們的另一個(gè)功能就是你可以指定正則表達(dá)式的一部分的重復(fù)次數(shù)。

我們討論的第一個(gè)重復(fù)功能的元字符是 *。* 并不匹配字母字符 "*";相反,它指定前一個(gè)字符可以被匹配零次或更多次,而不是只有一次。

舉個(gè)例子,ca*t 將匹配 "ct" (0 個(gè) "a" 字符), "cat" (1 個(gè) "a"), "caaat" (3 個(gè) "a" 字符)等等。RE 引擎有各種來(lái)自 C 的整數(shù)類(lèi)型大小的內(nèi)部限制,以防止它匹配超過(guò)2億個(gè) "a" 字符;你也許沒(méi)有足夠的內(nèi)存去建造那么大的字符串,所以將不會(huì)累計(jì)到那個(gè)限制。

象 * 這樣地重復(fù)是“貪婪的”;當(dāng)重復(fù)一個(gè) RE 時(shí),匹配引擎會(huì)試著重復(fù)盡可能多的次數(shù)。如果模式的後面部分沒(méi)有被匹配,匹配引擎將退回并再次嘗試更小的重復(fù)。

責(zé)任編輯:曹凱 來(lái)源: 博客園
相關(guān)推薦

2018-09-27 15:25:08

正則表達(dá)式前端

2024-09-14 09:18:14

Python正則表達(dá)式

2010-02-23 13:47:51

Python正則表達(dá)式

2021-01-27 11:34:19

Python正則表達(dá)式字符串

2011-07-11 12:33:30

JAVA

2010-03-25 18:25:36

Python正則表達(dá)式

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2010-03-01 15:51:59

Python則表達(dá)式

2010-03-11 08:55:45

python正則表達(dá)式

2019-12-10 10:40:57

Python正則表達(dá)式編程語(yǔ)言

2010-03-03 14:30:05

Python set類(lèi)

2020-10-16 17:00:16

正則表達(dá)式字符Python

2009-02-18 09:48:20

正則表達(dá)式Java教程

2009-09-16 18:19:34

正則表達(dá)式組

2011-06-02 12:34:16

正則表達(dá)式

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2019-07-17 15:45:47

正則表達(dá)式字符串前端

2022-03-28 06:19:14

正則表達(dá)式開(kāi)發(fā)

2016-11-10 16:21:22

Java 正則表達(dá)式

2022-01-04 11:35:03

Linux Shel正則表達(dá)式Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)