《Python安全實踐-PythonHacking》課件-第1章_第1頁
《Python安全實踐-PythonHacking》課件-第1章_第2頁
《Python安全實踐-PythonHacking》課件-第1章_第3頁
《Python安全實踐-PythonHacking》課件-第1章_第4頁
《Python安全實踐-PythonHacking》課件-第1章_第5頁
已閱讀5頁,還剩133頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第一章Python基礎(chǔ)1.1Python簡介1.2配置環(huán)境1.3Python基礎(chǔ)語法1.4Python編碼1.5函數(shù)1.6文件操作1.7異常處理try...except...finally1.8模塊1.9面向?qū)ο?.10正則表達式習題

1.1Python簡介

Python是一種簡單易學卻又功能十分強大的腳本語言。近年來隨著信息安全、人工智能和機器學習的快速發(fā)展,學習和使用該語言的用戶不斷增加。Python是一種解釋型語言,其運行速度相對較慢,但是它擁有極高的開發(fā)效率和極其強大的內(nèi)置與外置第三方庫,利用Python可以在短時間內(nèi)開發(fā)出滿足要求的程序,因此Python在程序開發(fā)階段節(jié)省的時間足以彌補其解釋型語言運行速度低的缺陷。另外,Python開發(fā)的程序通常都以源碼形式發(fā)布,用戶可以根據(jù)自己的需求修改代碼,擴展性很強。

1.2配置環(huán)境

1.2.1Kali安裝

Kali目前的最新版本是2.0,其官方下載網(wǎng)址為/downloads/。建議將Kali安裝在虛擬機上,此時只需要在官方網(wǎng)站下載相應(yīng)的虛擬機鏡像文件。目前常用的Kali安裝版本如圖1-1所示,讀者自行選擇相應(yīng)版本下載,然后在VM(虛擬機軟件)中導入就可以使用了。登錄時使用Kali系統(tǒng)初始的用戶名“root”和密碼“toor”。圖1-1常用的Kali安裝版本

下載Kali后將其解壓,并在安裝完VM的情況下點擊目錄下后綴名為vmx的文件,即可運行Kali系統(tǒng)。打開虛擬機,出現(xiàn)圖1-2所示的彈窗,點擊“我已移動該虛擬機(M)”,即可繼續(xù)開啟虛擬機。

圖1-2打開虛擬機

打開虛擬機后,以初始的用戶名root、密碼toor登錄進入Kali系統(tǒng)。如果需要對Kali進行更新以獲得最新版本的軟件及各種組件,可以使用apt-get命令對系統(tǒng)和軟件包進行管理,參見圖1-3。

圖1-3更新Kali系統(tǒng)中的軟件

注:Kali系統(tǒng)中軟件包安裝和管理命令apt-get的用法如下:

apt-getinstallpackage:安裝包。

apt-getremovepackage:刪除包。

apt-getupdate:更新源。

apt-getupgrade:更新已安裝的包。

apt-getdist-upgrade:升級系統(tǒng)。

同時,為便于Python中各種第三方庫的管理,建議安裝pip工具。其操作步驟如下:

(1)下載pip安裝包:wgethttps://bootstrap.pypa.io/get-pip.py--no-check-certificate。

(2)以root用戶運行命令pythonget-pip.py,即可完成安裝。

(3)如果執(zhí)行pip命令后出現(xiàn)文件或者目錄不存在的問題,可以通過建立符號鏈接來解決。

1.2.2WingIDE安裝

對于初學者,也可以選擇付費軟件WingIDE作為開發(fā)環(huán)境。WingIDE本身使用Python語言開發(fā)且功能豐富、易于編程。在Kali中安裝WingIDE,首先需要下載其最新的deb安裝包(下載網(wǎng)址為/pub/wingide),下載完成后在相應(yīng)目錄下執(zhí)行dpkg-iwingide6_6.0.6-1_amd64.deb即可完成安裝,如圖1-4所示。

圖1-4安裝WingIDE

WingIDE安裝完成后,可以在虛擬機的“Applications”→“Usualapplications”→“Programming”中找到安裝好的WingIDE,如圖1-5所示。

圖1-5WingIDE位置

在Kali中經(jīng)常會出現(xiàn)WingIDE使用一段時間后在界面上方導航欄中找不到的情況。為了防止這種情況的出現(xiàn),可以在其安裝完成之后將啟動快捷方式備份一份在桌面上。在“Files”→“OtherLocations”→“Computer”中搜索“wingide”,將搜索結(jié)果中的“WingPro6.0”置于桌面以備后用,如圖1-6所示。

圖1-6啟動快捷方式

1.3Python基礎(chǔ)語法

1.3.1數(shù)據(jù)類型與變量在計算機中,不同的數(shù)據(jù)需要用不同的數(shù)據(jù)類型來表示。Python支持動態(tài)數(shù)據(jù)類型,程序員不需要提前聲明數(shù)據(jù)類型,解釋器會自動識別變量的數(shù)據(jù)類型。在Python中能夠直接處理的數(shù)據(jù)類型包括整數(shù)、浮點數(shù)、字符串和布爾值,除此之外還有一些復(fù)雜的數(shù)據(jù)類型,比如列表、數(shù)組等。

注:本書演示代碼采用Python2.7編寫。

程序中的變量都由一個名字來表示。變量名必須是大小寫英文、數(shù)字和下劃線的組合,且不能以數(shù)字開頭。變量可以是任意的數(shù)據(jù)類型,它對應(yīng)的數(shù)據(jù)存儲在內(nèi)存中,而內(nèi)存中又可以存儲不同類型的值。在下面的代碼中,可通過str(

)函數(shù)將整數(shù)轉(zhuǎn)換成字符串,然后把兩個字符串連接成一個字符串。

1.3.2字符串

Python中的字符串是以單引號?‘、雙引號?“?或者三引號(

’‘’、”“”)括起來的任意文本,如:‘helloworld’、“code”?等。單引號和雙引號本質(zhì)上是等價的,單、雙引號都支持的好處在于字符串中一旦出現(xiàn)單引號或者雙引號時無需用轉(zhuǎn)義字符,而是用另一種引號括起來即可。單引號?‘

’定義字符串時,會認為字符串里面的雙引號?“

”?是普通字符,從而不需要轉(zhuǎn)義;反之用雙引號定義字符串時,就會認為字符串里面的單引號是普通字符無需轉(zhuǎn)義。

>>>print'hell\'o'

Python的字符串模塊提供了強大的字符串處理能力。下面通過舉例來介紹一些常用的字符串處理功能:

1.3.3列表

Python語言不像C語言,并沒有專用的數(shù)組類型,與其相似的概念有以下幾個。

(1)

list:普通的列表,初始化后可以通過特定方法動態(tài)增加元素。

定義方式:

arr=[元素]

(2)

Tuple:元組,固定的數(shù)組,一旦定義后,其元素是不能修改的。

定義方式:

arr=(元素)

(3)

Dictionary:字典類型,即Hash數(shù)組,采用鍵-值對的形式。

定義方式:

arr={元素key:values}

列表(list)是Python內(nèi)置的一種數(shù)據(jù)類型,可以用來存儲一組不同類型的數(shù)據(jù)。列表通過使用方括號括起來逗號隔開的不同的數(shù)據(jù)項即可,核心概念如圖1-7所示。

圖1-7Python中的list數(shù)組

與字符串的索引一樣,列表索引從0開始。列表可以通過下標索引或者方括號進行截取、切片、組合等,如:

Python數(shù)組實際上是一個鏈表,因此定義后不能像PHP之類的語言一樣,直接在后面追加元素,而是需要用操作鏈表的方法操作。常用的方法如表1-1所示。

1.3.4元組

元組與列表類似,最大的不同之處在于它不允許修改元組內(nèi)的元素,如下所示:

1.3.5字典

除了列表外,字典也是Python的一種內(nèi)置數(shù)據(jù)類型,用?{}?來表示,其元素為鍵-值形式,通過鍵來找其對應(yīng)的值,字典中沒有索引。字典的有關(guān)語法點如圖1-8所示。

圖1-8Python中的字典

可通過以下面代碼來學習字典的用法:

1.3.6控制語句

和其他計算機語言一樣,Python語言的控制語句主要有分支語句和循環(huán)語句兩種。

1.分支語句

Python中條件選擇語句的關(guān)鍵字為if、elif和else,其基本形式如下:

例如,if基本用法如下:

如果判斷需要多個條件同時判斷時,可以使用or(或)表示兩個條件有一個成立時判斷條件成功;使用and(與)時,表示只有兩個條件同時成立的情況下,判斷條件才成功。

注:Python不允許在if語句的條件中賦值,所以if1?=

2會報錯。至于區(qū)別,在編程語言中?'=='?表示相等;'='?用于賦值。

2.循環(huán)語句

for循環(huán)的語法如下:

例如,以下代碼可計算數(shù)組所有元素的和:

和循環(huán)語句經(jīng)常配合使用的有一個range(

)內(nèi)置函數(shù),它可以生成某個范圍內(nèi)的數(shù)字列表。比如,range(1,5)就會生成[1,2,3,4]這樣一個列表,而range(5)會生成[0,1,2,3,4]這樣一個列表。例如:

for和while循環(huán)語句還可以同if...elif...else結(jié)合起來實現(xiàn)各種控制,例如以下代碼可找出100以內(nèi)的素數(shù)(注意for...else表達的意思):

3.?for...[if]...?構(gòu)建List

Python中,for...[if]...?語句可簡潔地構(gòu)建List。從for給定的List中選擇出滿足if條件的元素組成新的List,其中if是可以省略的。下面舉幾個簡單的例子進行說明。

1.4Python編碼

1.4.1Python字符編碼與解碼通常Python程序需要處理多種字符,如英文字符、中文字符等,例如以下代碼:

print"你好"

如果在終端直接運行Pythoncode.py,那么程序會報錯。這是因為Python中默認的編碼是ASCII碼,ASCII只支持256個字符,不支持中文。在Python編碼中,為了支持其他字符,必須在源文件的第一行顯式指定編碼的格式:

#-*-coding:utf-8-*-

或者

#coding=utf-8

注:#coding=utf-8的“=”號兩邊不要有空格。

在Python中,str和unicode這兩種字符串類型之間的轉(zhuǎn)換,是由decode函數(shù)和encode函數(shù)來完成的,如圖1-9所示。

圖1-9編碼與解碼

另外,Python中可用的字符編碼有很多,并且還有各種別名,不區(qū)分英文大小寫,比如UTF-8可以寫成u8或者utf8,詳細信息可以參考網(wǎng)址:/library/codecs.

html#standard-encodings。

如果一個字符串已經(jīng)是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷,如下所示:

1.4.2數(shù)據(jù)編碼

在使用Python處理密碼學問題時,經(jīng)常需要將一段文本轉(zhuǎn)化為二進制或者十六進制進行一些位操作。Python自帶的binascii模塊可以很好地滿足上述需求。

binascii模塊除了上述ASCII編碼和十六進制編碼以外,還可以實現(xiàn)base64、crc32等編碼功能。例如,Base64對應(yīng)的函數(shù)分別是:

注(/wiki/Base64):

base64是一種基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法。base64中的可打印字符包括字母A~Z、a~z,數(shù)字0~9,'+'、'\'

等共64個字符。每個字符可以表示6個比特信息,也就是每6個比特為一個單元,分別對應(yīng)某個可打印字符。編碼時每3個字節(jié)(24個比特)切分為4個base64單元,即3個字節(jié)數(shù)據(jù)需要用4個可打印字符來表示。

實際上,Python語言專門有個base64模塊實現(xiàn)base64編碼和解碼,具體例子如下:

1.5函數(shù)

1.5.1函數(shù)定義

Python函數(shù)定義的基本形式如下:

其中:

(1)

def是函數(shù)定義的關(guān)鍵詞,定義時不用指定返回值的類型。

(2)函數(shù)參數(shù)params可以是零個、一個或者多個。函數(shù)參數(shù)同樣也不用指定參數(shù)類型,因為在Python中變量都是弱類型的,Python會自動根據(jù)值來維護其類型。

(3)

return返回語句是可選的,它可以在函數(shù)體內(nèi)任何地方出現(xiàn),表示函數(shù)的調(diào)用執(zhí)行到此結(jié)束。如果沒有return語句,那么會自動返回NONE;如果有return語句,但是在return后面沒有接表達式或者值,那么也是返回NONE。

舉例:

1.5.2函數(shù)參數(shù)

函數(shù)可以有默認參數(shù)。例如:

Python函數(shù)中,不可變參數(shù)(例如數(shù)字、字符串、元組)是通過“值”進行傳遞的,可變對象(例如列表和字典)是通過“指針”進行傳遞的。例如:

Python函數(shù)的返回值可以有多個變量,相當于返回的是一個元組,只是圓括號()被省略了。例如:

Python還支持函數(shù)的任意參數(shù)。第一種方法是在元組中收集不匹配的任意參數(shù)。第二種方法是在字典中收集不匹配的關(guān)鍵字參數(shù)。'*'?和?'**'?表示能夠接受0到任意多個參數(shù),'*'?表示將沒有匹配的值都放在同一個元組中,'**'?表示將沒有匹配的鍵和值都放在一個字典中。以下代碼給出了Python中4種參數(shù)傳遞的情況:

舉例:在滲透測試過程中獲得了管理員口令的md5哈希值。眾所周知md5是不可逆的,無法解密。唯一的辦法就是從以往積累的口令字典中,逐個取出口令然后計算其md5值,再和管理員的md5哈希值進行比較,若兩值相同則對應(yīng)的口令就是管理員的口令。假設(shè)管理員的md5值為'21232f297a57a5a743894a0e4a801fc3',則窮舉破解代碼如下:

通過運行crack函數(shù)可以得知管理員密碼為?'admin'。上述代碼中還使用了md5模塊,你可以使用help()、dir()函數(shù)來快速了解相關(guān)模塊的函數(shù)。

1.5.3匿名函數(shù)

lambda函數(shù)也叫匿名函數(shù),即該函數(shù)沒有具體的名稱:

f=lambda參數(shù)1,參數(shù)2:返回的計算值

例如:

>>>add=lambdax,y:x+y

>>>printadd(1,2)

3

lambda語句中,冒號前是參數(shù),可以有多個,參數(shù)之間用逗號隔開;冒號右邊是返回值。lambda語句構(gòu)建的其實是一個函數(shù)對象,如下所示:

匿名函數(shù)可以作為表達式出現(xiàn)Python語句的任何地方,例如:

1.5.4Python中的模塊

1.模塊的引入

在Python中用關(guān)鍵字import來引入某個模塊,比如要引用math模塊,就可以在文件最開始的地方用importmath來引入。在調(diào)用math模塊中的函數(shù)時,必須這樣引用:

模塊名.函數(shù)名

在函數(shù)名前必須加上模塊名,是為了避免在多個模塊中含有相同名稱的函數(shù)情況下,解釋器可以無歧義地確定要調(diào)用的函數(shù):

有時候我們只需要用到模塊中的某個函數(shù),那么只需要引入該函數(shù)即可,此時可以通過以下語句來實現(xiàn):

from模塊名import函數(shù)名1,函數(shù)名2...

如果想一次性引入math中所有的函數(shù)或者常量,可以通過frommathimport*?來實現(xiàn),但通常不建議這么做。

2.定義自己的模塊

在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。

比如有這樣一個文件test.py,在test.py中定義了add函數(shù):

3.在引入模塊時的默認代碼執(zhí)行

先看一個例子,在文件test.py中的代碼如下:

1.5.5

Python腳本框架

編寫Python代碼有一定的框架樣式。在Python代碼的開始部分(起始行),告訴系統(tǒng)需要使用哪一個解釋器,如?"#!/usr/bin/envpython";然后通過?"defmain():"?聲明一個main函數(shù),通過main函數(shù)調(diào)用其他的函數(shù)。main函數(shù)相當于程序的主入口,通常在命令行下執(zhí)行Python代碼時,都是從main函數(shù)開始執(zhí)行的。Python判斷文件是被執(zhí)行還是被調(diào)用(例如通過import方式),依靠的是?__name__?變量。所以代碼最后2行有一個if判斷,其目的就在于此。

需要注意的是,Python使用縮進來對齊和組織代碼的執(zhí)行,所有沒有縮進的代碼(非函數(shù)定義和類定義),都會在載入時自動執(zhí)行。這些代碼,也可以認為是Python的main函數(shù)。

1.6文件操作

在上一節(jié)的crack函數(shù)中枚舉了5個口令用于爆破,由于密碼數(shù)量較少,因此可以很方便地將其放于列表中來遍歷。在實際爆破時,可能要枚舉成千上萬個密碼甚至更多,此時不便將這些密碼置于列表中。解決此問題的方法就是密碼保存在文件中,通過文件操作獲得密碼。接下來我們改進上面的crack函數(shù),使其獲取磁盤中保存有常見弱口令的password.txt來獲得密碼。

1.字符編碼

要讀取非UTF-8編碼的文本文件,需要給open(?)函數(shù)傳入encoding參數(shù),例如,讀取GBK編碼的文件:

>>>f=open('d:\gbk.txt','r',encoding='gbk')

>>>f.read()

'測試'

遇到有些編碼不規(guī)范的文件,可能會遇到UnicodeDecodeError,因為在文本文件中可能夾雜了一些非法編碼的字符。遇到這種情況,open(?)函數(shù)還接收一個errors參數(shù),表示如果遇到編碼錯誤后如何處理。最簡單的處理方式是直接忽略:

>>>f=open('d:\gbk.txt','r',encoding='gbk',errors='ignore')

2.二進制文件

前面介紹的默認都是讀取文本文件,并且是UTF-8編碼的文本文件。要讀取二進制文件,比如圖片、視頻等,用?‘rb’?模式打開文件即可,如下所示:

>>>f=open('d:\test.jpg','rb')

>>>f.read()

b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'

1.7異常處理try...except...finally

異常處理在任何一門編程語言里都是值得關(guān)注的一個話題,良好的異常處理可以讓程序更加健壯,清晰的錯誤信息有助于快速修復(fù)問題。從本章第一節(jié)到本小節(jié),相信讀者已經(jīng)手敲了不少代碼。代碼多了難免會遇到錯誤,比如讀者在編輯上一頁中的代碼時,是不是遇到了下面這種狀況:

以上情況就屬于IOError異常,后面的英文解釋是告訴我們沒有找到所謂的'D:\\password.txt'?文件或目錄,遇到這種情況的讀者,肯定是在D盤沒有創(chuàng)建password.txt文件的基礎(chǔ)上執(zhí)行了上面的代碼。

1.

try...except語法

通過上面例子可以知道,當程序出現(xiàn)異常時,程序拋出異常并終止。這就導致兩個問題,首先是直接拋出異??瓷先ゲ皇呛苡押?,其次是程序出現(xiàn)異常無法繼續(xù)執(zhí)行后續(xù)代碼。

接下來將介紹如何通過異常處理來解決這個問題。還是以crack函數(shù)為例,可修改crack函數(shù)如下所示:

在上述異常處理代碼中:

(1)

except語句不是必需的,finally語句也不是必需的,但是二者必須要有一個,否則就沒有try的意義了。

(2)

except語句可以有多個,Python會按except語句的順序依次匹配所指定的異常,如果異常已經(jīng)處理就不會再進入后面的except語句。

(3)

except語句可以以元組形式同時指定多個異常,如:

(4)

except語句后面如果不指定異常類型,則默認捕獲所有異常,可以通過sys模塊獲取當前異常。

(5)

raise語句表示需要自主拋出一個異常類型,等同于C#和Java語言中的throw語句,其語法規(guī)則如下:

接下來進一步介紹異常處理,這里給出兩個例子進行說明,一個是語句不出現(xiàn)異常,另一個是語句出現(xiàn)異常。首先介紹語句出現(xiàn)異常的例子,如下所示:

語句不出現(xiàn)異常的例子,其代碼的執(zhí)行如下所示:

通過比較上面兩個例子可以發(fā)現(xiàn),except下面的語句只有出現(xiàn)異常且異常與except后面指定異常類型相同時執(zhí)行(本例中的Exception用于捕獲所有異常),else下面的語句在不存在異常的情況下執(zhí)行,finally下面的語句在兩種情況下均會執(zhí)行。

2.配合try...except錯誤控制使用

在異常處理語句中,當try代碼塊沒有出現(xiàn)任何的異常時,else語句塊會被執(zhí)行。

結(jié)果如下:

123

convert123tointegersuccessfully

cannotconvertme123toainteger

1.8模塊

1.8.1sys模塊

Python內(nèi)置的sys模塊提供了對Python解釋器和環(huán)境有關(guān)信息的訪問使用與維護函數(shù)。sys.argv是一個列表,用于腳本程序從命令行獲取參數(shù)信息。下面通過簡單代碼介紹如何通過命令行把參數(shù)傳遞給Python腳本,如下所示:

1.8.2os模塊

os的含義為操作系統(tǒng),也就是說Python內(nèi)置的os模塊提供了與操作系統(tǒng)進行交互的功能,包括系統(tǒng)類型、文件和目錄操作、命令執(zhí)行、進程操作等。下面通過一個ping掃描的例子來了解一下os模塊。

1.9面向?qū)ο?/p>

Python語言可以通過class關(guān)鍵字創(chuàng)建類,下面通過將crack函數(shù)的功能拓展為一個Crack類作為示例,介紹如何在Python中創(chuàng)建類,具體代碼如下所示:

上述Crack類中定義了密碼文件路徑及破解目標的set和get方法,并實現(xiàn)了用crack方法來實施破解的過程。通過觀察可以發(fā)現(xiàn),所涉及的每個方法都要傳入“self”參數(shù)。該類中定義的第一個“__init__”方法實現(xiàn)了對類對象的初始化。

1.10正則表達式

1.10.1正則表達式的通用語法正則表達式本身也算是一種語言,有自己的語法規(guī)則。正則表達式可以包含普通字符和特殊字符。普通字符(比如數(shù)字或者字母)可以直接對目標字符串進行匹配;而特殊字符可以表示某一類普通字符,或者是改變其周圍的正則表達式的含義。表1-2列舉了部分正規(guī)表達式中的通用字符匹配規(guī)則。

在正則表達式中,包含“?\?”的特殊序列的意義如表1-3所示。

1.10.2

Python的re模塊

Python的re模塊提供各種正則表達式的匹配操作,能夠在絕大多數(shù)情況下有效地實現(xiàn)對復(fù)雜字符串的分析并提取出相關(guān)信息。

Python的re模塊正則表達式定義了一系列函數(shù)、常量以及異常;同時,正則表達式被編譯成RegexObject實例,其本身可以為不同的操作提供方法。接下來簡要介紹這些函數(shù)的功能和用法。

1.

pile(pattern[,flags])

該函數(shù)把正則表達式的模式和標識轉(zhuǎn)化成正則表達式對象,供match(

)和search(?)兩個函數(shù)使用。

re模塊所定義的flag包括:

(1)

re.I:忽略大小寫。

(2)

re.L:表示特殊字符集?\w,\W,\b,\B,\s,\S依賴于當前環(huán)境。

(3)

re.M:多行模式。

(4)

re.S:即為?‘.’,并且包括換行符在內(nèi)的任意字符(

‘.’

不包括換行符)。

(5)

re.U:表示特殊字符集?\w,\W,\b,\B,\d,\D,\s,\S依賴于Unicode字符屬性數(shù)據(jù)庫。

(6)

re.X:為了增加可讀性,忽略空格和'#'后面的注釋。

例如,以下兩種用法的結(jié)果相同:

用法一:

用法二:

2.?re.search(pattern,string[,flags])

該函數(shù)在字符串string中查找匹配正則表達式模式的位置,如果找到一個匹配就返回MatchObject的實例(并不會匹配所有的);如果沒有找到匹配的位置,則返回None。

對于已編譯的正則表達式對象(re.RegexObject)來說,有以下search的方法:

search(string[,pos[,endpos]])

若regex是已編譯好的正則表達式對象,則regex.search(string,0,50)等同于regex.search(string[:50],0)。

具體示例如下:

3.?re.match(pattern,string[,flags])

該函數(shù)用于判斷pattern是否在字符串開頭位置有匹配項。對于RegexObject,有函數(shù):

match(string[,pos[,endpos]])

match(?)函數(shù)只在字符串的開始位置嘗試匹配正則表達式,也就是只報告從位置0開始的匹配情況;而search(?)函數(shù)是掃描整個字符串來查找匹配的。如果想要搜索整個字符串來尋找匹配,應(yīng)當用search(?)。

4.?re.split(pattern,string[,maxsplit=0,flags=0])

該函數(shù)將字符串匹配正則表達式的部分割開并返回一個列表。對于RegexObje

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論