Python程序開發(fā)案例教程(第2版)課件 第11章 正則表達(dá)式_第1頁
Python程序開發(fā)案例教程(第2版)課件 第11章 正則表達(dá)式_第2頁
Python程序開發(fā)案例教程(第2版)課件 第11章 正則表達(dá)式_第3頁
Python程序開發(fā)案例教程(第2版)課件 第11章 正則表達(dá)式_第4頁
Python程序開發(fā)案例教程(第2版)課件 第11章 正則表達(dá)式_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第11章正則表達(dá)式《Python程序開發(fā)案例教程(第2版))》學(xué)習(xí)目標(biāo)/Target

熟悉元字符,能夠歸納元字符的功能以及基本用法熟悉預(yù)定義字符集,能夠歸納預(yù)定義字符集的功能了解re模塊,能夠說出re模塊中常用函數(shù)或方法的作用掌握預(yù)編譯的方式,能夠通過complie()函數(shù)將正則表達(dá)式預(yù)編譯為正則對象掌握匹配與搜索的方式,能夠通過match()與search()函數(shù)實現(xiàn)匹配與搜索的功能學(xué)習(xí)目標(biāo)/Target

掌握匹配對象,能夠通過匹配對象的方法獲取匹配結(jié)果中的各項數(shù)據(jù)

掌握全文匹配的方式,能夠通過findall()與finditer()函數(shù)實現(xiàn)全文匹配的功能掌握檢索替換的方式,能夠通過sub()、subn()函數(shù)實現(xiàn)檢索替換的功能掌握文本分割的方式,能夠通過split()函數(shù)實現(xiàn)文本分割的功能熟悉貪婪匹配,能夠區(qū)分貪婪匹配和非貪婪匹配的不同章節(jié)概述/Summary網(wǎng)站開發(fā)人員需要對用戶在注冊頁面提交的信息進(jìn)行驗證,包括手機(jī)號、用戶名、郵箱等。由于這些信息遵循復(fù)雜的規(guī)則,僅使用條件語句判斷將增加工作量。然而,正則表達(dá)式解決了這個問題。正則表達(dá)式是一種描述字符串結(jié)構(gòu)的語法規(guī)則,它在字符串的查找、匹配、替換等方面非常強(qiáng)大,并且被許多編程語言廣泛支持,包括Python。本章將介紹如何在Python中使用正則表達(dá)式。目錄/Contents010203基礎(chǔ)知識re模塊預(yù)編譯04匹配與搜索目錄/Contents050607匹配對象全文匹配檢索替換08實例2:電影信息提取目錄/Contents091011文本分割貪婪匹配實例3:用戶注冊驗證基礎(chǔ)知識11.1

先定一個小目標(biāo)!熟悉元字符,能夠歸納元字符的功能以及基本用法11.1.1元字符元字符在正則表達(dá)式中,元字符指具有特殊含義的專用字符,可以用來規(guī)定其前導(dǎo)字符在目標(biāo)對象中出現(xiàn)的模式,前導(dǎo)字符是位于元字符之前的字符。正則表達(dá)式中的元字符一般由特殊字符和符號組成。11.1.1元字符元字符常用的元字符如表所示元字符功能說明.點(diǎn)字符,匹配任何一個字符,除了換行符^脫字符,匹配字符串的開頭$美元符,匹配字符串的結(jié)尾|連接符,用于連接多個模式,匹配任意一個模式[]字符組,匹配其中出現(xiàn)的任意一個字符-連字符,表示范圍,比如1-5等價于1、2、3、4、5?匹配其前導(dǎo)字符0次或1次*匹配其前導(dǎo)字符0次或多次+匹配其前導(dǎo)字符1次或多次{n}/{m,n}匹配其前導(dǎo)字符n次/匹配其前導(dǎo)字符m~n次()在模式中劃分出子模式,并保存子模式的匹配結(jié)果11.1.1元字符1.點(diǎn)字符11.1.1元字符(1)點(diǎn)字符“.”Jam、Jom、J#m、Jim、J2mJ.m(2)脫字符“^”和美元符“$”category^cat(3)連接符“|”匹配cat或dogcat|dog(4)字符組“[]”argv或argsarg[vs]1.點(diǎn)字符11.1.1元字符(5)連字符“-”0~9之間的一個數(shù)字[0-9](6)元字符“?”Jun或JuneJune?(7)元字符“*”、“+”以及{n}/{m,n}hp、htp、http、htttpht*p(8)元字符“()”Jan或JanuaryJan(uary)?

先定一個小目標(biāo)!熟悉預(yù)定義字符集,能夠歸納預(yù)定義字符集的功能11.1.2預(yù)定義字符集正則表達(dá)式中預(yù)定義了一些字符集,字符集能以簡潔的方式表示一些由元字符和普通字符表示的匹配規(guī)則。常見的預(yù)定義字符集如表所示。異常的類型11.1.2預(yù)定義字符集元字符功能說明\w匹配下畫線或任何字母與數(shù)字\s匹配任意的空白字符,等價于[<空格>\t\r\n\f\v]\d匹配任意數(shù)字,等價于[0-9]\b匹配單詞的邊界\W與\w相反,匹配特殊字符\S與\s相反,匹配任意非空白字符的字符,等價于[^\s]\D與\d相反,匹配任意非數(shù)字的字符,等價于[^\d]\B與\b相反,匹配不出現(xiàn)在單詞邊界的元素\A僅匹配字符串的開頭,等價于^\Z僅匹配字符串的結(jié)尾,等價于$re模塊11.2

先定一個小目標(biāo)!了解re模塊,能夠說出re模塊中常用函數(shù)或方法的作用11.2re模塊re模塊11.2re模塊Python中的re模塊是正則表達(dá)式模塊,該模塊提供了文本匹配、文本檢索替換、文本分割等功能。re模塊中常用的函數(shù)及方法如表所示。函數(shù)/方法說明compile()對正則表達(dá)式進(jìn)行預(yù)編譯,并返回一個Pattern對象match()從字符串的開頭位置開始匹配,若匹配成功返回Match對象,否則返回Nonesearch()從字符串的任意位置開始匹配,若匹配成功返回Match對象,否則返回Nonesplit()根據(jù)正則表達(dá)式將目標(biāo)字符串進(jìn)行分割,并返回一個分割后的列表findall()在目標(biāo)字符串中從左至右查找與正則表達(dá)式模式匹配的所有非重疊子串,將返回一個包含這些子串的列表re模塊11.2re模塊函數(shù)/方法說明finditer()功能與findall()相同,但返回結(jié)果是迭代器對象sub()搜索目標(biāo)字符串中與正則對象匹配的子串,使用指定字符串替換,并返回替換后的對象subn()搜索目標(biāo)字符串中與正則對象匹配的子串,使用指定字符串替換,返回替換后的對象和替換次數(shù)group()返回全部Pattern對象groups()返回一個包含全部匹配的子組的元組,若匹配失敗,則返回空元組Python中的re模塊是正則表達(dá)式模塊,該模塊提供了文本匹配、文本檢索替換、文本分割等功能。re模塊中常用的函數(shù)及方法如表所示。預(yù)編譯11.3

先定一個小目標(biāo)!掌握預(yù)編譯的方式,能夠通過complie()函數(shù)將正則表達(dá)式預(yù)編譯為正則對象11.3預(yù)編譯預(yù)編譯如果需要對一個正則表達(dá)式重復(fù)使用,那么可以使用compile()函數(shù)對其進(jìn)行預(yù)編譯,以節(jié)省每次編譯正則表達(dá)式的開銷。complie()函數(shù)的語法格式如下:11.3預(yù)編譯compile(pattern,flags=0)語法格式pattern:表示要編譯的正則表達(dá)式。flags:用于指定正則匹配的模式。預(yù)編譯參數(shù)flags用于指定正則匹配的模式,該參數(shù)的常用取值如表所示。11.3預(yù)編譯取值說明re.I忽略大小寫的模式,使匹配對大小寫不敏感re.L用于本地化的識別匹配,它會根據(jù)當(dāng)前區(qū)域設(shè)置影響一些預(yù)定義字符集的解釋,這些預(yù)定義字符集包括\w、\W、\b、\B等re.M多行模式,使得^和$匹配每一行的開頭和結(jié)尾,而不僅僅是整個字符串的開頭和結(jié)尾re.S使.匹配所有字符,包括換行符re.U根據(jù)Unicode字符集解析字符re.A根據(jù)ASCII字符集解析字符re.X使用更靈活的格式書寫正則表達(dá)式,正則表達(dá)式可以是多行、忽略空白字符、加入注釋等,使用戶更容易理解11.3預(yù)編譯預(yù)編譯complie()函數(shù)在編譯成功后會返回一個Pattern對象。例如,使用complie()函數(shù)將正則表達(dá)式預(yù)編譯為Pattern對象,具體代碼如下:importreregex_obj=pile(r'\d')words='TodayisJuly26,2023.'print(regex_obj.findall(words))示例11.3預(yù)編譯預(yù)編譯如果想要匹配這一組字符串中所有的英文字母,可以在使用compile()函數(shù)預(yù)編譯正則對象時設(shè)置flags參數(shù),將正則表達(dá)式的匹配模式設(shè)置為re.I,忽略英文字母的大小寫,示例代碼如下:importre#將正則表達(dá)式[a-z]+預(yù)編譯為正則對象,同時指定匹配模式為re.Iregex_one=pile(r'[a-z]+',re.I)words='TodayisMarch28,2019.'print(regex_one.findall(words))示例匹配與搜索11.4

先定一個小目標(biāo)!掌握匹配與搜索的方式,能夠通過match()函數(shù)實現(xiàn)匹配功能11.4.1使用match()函數(shù)進(jìn)行匹配11.4.1使用match()函數(shù)進(jìn)行匹配match()函數(shù)用于從字符串的開頭開始匹配正則表達(dá)式模式,它會嘗試將模式與字符串的開頭部分進(jìn)行匹配,如果匹配成功,match()函數(shù)返回一個Match對象,也就是匹配對象;如果匹配失敗,它返回None。match(pattern,string,flags=0)語法格式使用match()函數(shù)進(jìn)行匹配pattern:表示正則表達(dá)式,它的取值既可以是正則對象,也可以是包含正則表達(dá)式的字符串。string:表示待匹配的目標(biāo)字符串。flags:表示使用的匹配模式,默認(rèn)值為0,說明不使用任何匹配模式。11.4.1使用match()函數(shù)進(jìn)行匹配使用match()函數(shù)對指定的字符串進(jìn)行匹配與搜索,示例代碼如下:使用match()函數(shù)進(jìn)行匹配importredate_one="TodayisJuly26,2023."date_two="26July2023"print(re.match(r"\d",date_one))print(re.match(r"\d",date_two))示例

先定一個小目標(biāo)!掌握匹配與搜索的方式,能夠通過search()函數(shù)實現(xiàn)s搜索功能11.4.2使用search()函數(shù)進(jìn)行匹配search()函數(shù)會查找整個字符串,直到找到第一個滿足模式的子字符串。如果找到匹配項,search()函數(shù)返回一個匹配對象;如果沒有找到匹配項,它會返回None。search(pattern,string,flags=0)語法格式使用search()函數(shù)進(jìn)行匹配pattern:表示正則表達(dá)式,它的取值既可以是正則對象,也可以是包含正則表達(dá)式的字符串。string:表示待匹配的目標(biāo)字符串。flags:表示使用的匹配模式,默認(rèn)值為0,說明不使用任何匹配模式。11.4.2使用search()函數(shù)進(jìn)行匹配使用search()函數(shù)對指定的字符串進(jìn)行匹配與搜索,示例代碼如下:使用search()函數(shù)進(jìn)行匹配importreinfo_one="Iwasbornin2000."info_two="20000505"print(re.search(r"\d",info_one))print(re.search(r"\D",info_two))示例11.4.2使用search()函數(shù)進(jìn)行匹配

先定一個小目標(biāo)!11.4.3實例1:手機(jī)號運(yùn)營商根據(jù)任務(wù)分析實現(xiàn)實例1:手機(jī)號運(yùn)營商一個手機(jī)號碼由11位數(shù)字組成,前3位數(shù)字表示網(wǎng)絡(luò)識別號,第4~7位數(shù)字表示地區(qū)編號,第8-11位數(shù)字表示用戶編號。因此,我們可以通過手機(jī)號前3位數(shù)字的網(wǎng)絡(luò)識別號辨別手機(jī)號所屬運(yùn)營商。11.4.3實例1:手機(jī)號運(yùn)營商運(yùn)營商號碼段中國移動134、135、136、137、138、139、147、148、150、151、152、157、158、159、165、178、182、183、184、187、188、198中國聯(lián)通130、131、132、140、145、146、155、156、166、185、186、175、176中國電信133、149、153、180、181、189、177、173、174、191、199本實例要求編寫程序,實現(xiàn)判斷輸入的手機(jī)號碼是否合法以及判斷其所屬的運(yùn)營商的功能。使用列表保存價格信息。定義空列表用于保存用戶選購商品的價格。接收輸入的最大價格和最小價格。從價格列表中獲取每個商品價格。判斷商品價格區(qū)間。將商品價格進(jìn)行排序。實現(xiàn)思路11.4.3實例1:手機(jī)號運(yùn)營商在Chapter10項目中創(chuàng)建01_belong.py文件。在01_belong.py中編寫代碼。運(yùn)行01_belonge.py文件。實現(xiàn)步驟11.4.3實例1:手機(jī)號運(yùn)營商匹配對象11.5

先定一個小目標(biāo)!掌握匹配對象,能夠通過匹配對象的方法獲取匹配結(jié)果中的各項數(shù)據(jù)11.5匹配對象使用match()函數(shù)和search()函數(shù)對字符串進(jìn)行匹配與搜索時,返回的不是單一的匹配結(jié)果,而是如下形式的字符串:<re.Matchobject;span=(14,15),match='2'>返回形式匹配對象11.5匹配對象span表示本次獲取的匹配對象在原目標(biāo)文本中所處的位置,目標(biāo)文本的下標(biāo)從0開始。match表示匹配對象的內(nèi)容。span屬性是一個元組,元組中有兩個元素,第一個元素表示匹配對象在目標(biāo)字符串中的開始位置,第二個元素表示匹配對象在目標(biāo)字符串中的結(jié)束位置。匹配對象11.5匹配對象re模塊中提供了一些與匹配對象相關(guān)的常用方法,用于獲取匹配結(jié)果中的各項數(shù)據(jù),具體如表所示。方法說明group([num])獲取匹配的字符串,或獲取第num個子組的匹配結(jié)果start()獲取匹配對象的開始位置end()獲取匹配對象的結(jié)束位置span()獲取表示匹配對象位置的元組使用search()函數(shù)對指定的字符串進(jìn)行匹配與搜索,示例代碼如下:importreword='helloitheima'match_result=re.search(r'\whe\w',word)print(match_result)

#輸出匹配對象print(match_result.group())#獲取匹配對象包含的字符串print(match_result.start())

#獲取匹配對象的開始位置print(match_result.end())#獲取匹配對象的結(jié)束位置print(match_result.span())

#獲取匹配對象的位置示例匹配對象11.5匹配對象當(dāng)正則表達(dá)式中包含子組時,Python解釋器會將每個子組的匹配結(jié)果臨時存儲到緩沖區(qū)中,若用戶想獲取子組的匹配結(jié)果,可使用Match對象的group()方法,示例代碼如下:importrewords=re.search("(h)(e)",'helloheooo')print(words.group(1))#獲取第1個子組的匹配結(jié)果示例匹配對象11.5匹配對象匹配對象還有一個groups()方法,使用該方法可以獲取一個包含所有子組匹配結(jié)果的元組,示例如下:importrewords=re.search("(h)(e)",'helloheooo')print(words.groups())示例全文匹配11.6

先定一個小目標(biāo)!掌握全文匹配的方式,能夠通過findall()函數(shù)實現(xiàn)全文匹配的功能11.6.1findall()函數(shù)findall()函數(shù)可以獲取目標(biāo)字符串中所有與正則表達(dá)式匹配的內(nèi)容,并將所有匹配的內(nèi)容以列表的形式返回。findall()函數(shù)的語法格式如下:findall(pattern,string,flags=0)語法格式findall()函數(shù)pattern:表示正則表達(dá)式,它的取值既可以是正則對象,也可以是包含正則表達(dá)式的字符串。string:表示待匹配的目標(biāo)字符串。flags:表示使用的匹配模式,默認(rèn)值為0,說明不使用任何匹配模式。11.6.1findall()函數(shù)以字符串“狗的英文:Dog,貓的英文:Cat。”為例,使用findall()函數(shù)匹配該字符串中所有的中文字符,示例代碼如下:importrestring="狗的英文:Dog,貓的英文:Cat。"reg_zhn=pile(r"[\u4e00-\u9fa5]+")print(re.findall(reg_zhn,string))示例11.6.1findall()函數(shù)findall()函數(shù)

先定一個小目標(biāo)!掌握全文匹配的方式,能夠通過finditer()函數(shù)實現(xiàn)全文匹配的功能11.6.2finditer()函數(shù)finditer()函數(shù)同樣可以獲取目標(biāo)字符串中所有與正則表達(dá)式匹配的內(nèi)容,但該函數(shù)會將匹配到的子串以迭代器的形式返回。finditer()函數(shù)的語法格式如下:finditer(pattern,string,flags=0)語法格式finditer()函數(shù)pattern:表示正則表達(dá)式,它的取值既可以是正則對象,也可以是包含正則表達(dá)式的字符串。string:表示待匹配的目標(biāo)字符串。flags:表示使用的匹配模式,默認(rèn)值為0,說明不使用任何匹配模式。11.6.2finditer()函數(shù)以字符串“狗的英文:Dog,貓的英文:Cat。”為例,使用findall()函數(shù)匹配該字符串中所有的中文字符,示例代碼如下:importrestring="狗的英文:Dog,貓的英文:Cat。"reg_zhn=pile(r"[a-zA-Z]+")#匹配所有英文字符result_info=re.finditer(reg_zhn,string)print(result_info)print(type(result_info))示例11.6.2finditer()函數(shù)finditer()函數(shù)檢索替換11.7

先定一個小目標(biāo)!掌握檢索替換的方式,能夠通過sub()、subn()函數(shù)實現(xiàn)檢索替換的功能11.7檢索替換re模塊中提供的sub()、subn()函數(shù)用于替換目標(biāo)字符串中的匹配項,這兩個函數(shù)的語法格式如下所示:sub(pattern,repl,string,count=0,flags=0)subn(pattern,repl,string,count=0,flags=0)語法格式檢索替換pattern:表示需要傳入的正則表達(dá)式。repl:表示用于替換的字符串。string:表示待匹配的目標(biāo)字符串。count:表示替換的次數(shù),默認(rèn)值為0,表示替換所有的匹配項。flags:表示使用的匹配模式,默認(rèn)值為0,說明不使用任何匹配模式。11.7檢索替換sub()函數(shù)與sunb()函數(shù)的功能相似,不同的是若調(diào)用成功,sub()函數(shù)會返回替換后的字符串,subn()函數(shù)會返回包含替換結(jié)果和替換次數(shù)的元組。示例如下所示。importrewords='Andslowlyread,anddreamofthesoftlook'result_one=re.sub(r'\s','-',words)#使用sub()函數(shù)替換目標(biāo)字符串print(result_one)result_two=re.subn(r'\s','-',words)#使用subn()函數(shù)替換目標(biāo)字符串print(result_two)示例檢索替換11.7檢索替換實例2:電影信息提取11.8

先定一個小目標(biāo)!根據(jù)任務(wù)分析實現(xiàn)實例2:電影信息提取11.8實例2:電影信息提取現(xiàn)有“電影.txt”文件,該文件中保存了多部電影信息,包括電影排名、電影名稱、評分、類別、演員等,每種信息都有相對應(yīng)的標(biāo)簽,例如title標(biāo)簽對應(yīng)著電影名稱、rating標(biāo)簽對應(yīng)著電影評分、rank標(biāo)簽對應(yīng)著電影排名,示例如下:為了能夠提取指定的數(shù)據(jù)信息,可以使用正則表達(dá)式來解決。本實例要求編寫程序,實現(xiàn)將排名前20的電影名稱與評分信息提取。11.8實例2:電影信息提取{"rating":["9.6","50"],"rank":1,"cover_url":"/","is_playable":true,"id":"1292052","types":["劇情"],"regions":["中國"],"title":"我是電影名","url":"/","release_date":"1994-09-10","actor_count":25,"vote_count":1437526,"score":"9.6","actors":["張三","李四"],"is_watched":false}使用列表保存價格信息。定義空列表用于保存用戶選購商品的價格。接收輸入的最大價格和最小價格。從價格列表中獲取每個商品價格。判斷商品價格區(qū)間。將商品價格進(jìn)行排序。實現(xiàn)思路11.8實例2:電影信息提取在Chapter10項目中創(chuàng)建02_info_extract.py文件。在02_info_extract.py中編寫代碼。運(yùn)行02_info_extract.py文件。實現(xiàn)步驟11.8實例2:電影信息提取文本分割11.9

先定一個小目標(biāo)!掌握文本分割的方式,能夠通過split()函數(shù)實現(xiàn)文本分割的功能11.9文本分割re模塊中提供的split()函數(shù)可使用與正則表達(dá)式模式相同的字符串分割指定文本。split()函數(shù)的語法格式如下:split(pattern,string,maxsplit=0,flags=0)語法格式文本分割pattern:表示需要傳入的正則表達(dá)式。string:表示待匹配的目標(biāo)字符串。maxsplit:用于指定分隔的次數(shù),默認(rèn)值為0,表示匹配指定模式并全部進(jìn)行分割。flags:表示可選標(biāo)識符。11.9文本分割split()函數(shù)調(diào)用成功后,分割出的子項會被保存到列表中并返回。以字符串“Andslowlyread,anddreamofthesoftlook”為例,使用split()函數(shù)分配字符串,具體代碼如下所示。importrewords='Andslowlyread,anddreamofthesoftlook'result=re.split(r'\s',words) #以\s匹配的結(jié)果分割字符串wordsprint(result) 示例11.9文本分割文本分割貪婪匹配11.10

先定一個小目標(biāo)!熟悉貪婪匹配,能夠區(qū)分貪婪匹配和非貪婪匹配的不同11.10貪婪匹配1.模塊的概念正則表達(dá)式中有兩種匹配方式,分別是貪婪匹配和非貪婪匹配。所謂貪婪匹配,即在條件滿足的情況下,盡量多匹配更多的內(nèi)容。而非貪婪匹配則相反,盡量匹配最少的內(nèi)容。Python中正則表達(dá)式的默認(rèn)匹配方式為貪婪匹配。8.1.1模塊的概念以字符串“Andslowlyread,anddreamofthesoftlook”為例,假設(shè)使用正則表達(dá)式“and\s.*”對該字符串進(jìn)行匹配,示例如下:importrewords='Andslowlyread,anddreamofthesoftlook'result=re.search(r'and\s.*',words)print(result.group())示例11.10貪婪匹配貪婪匹配貪婪匹配方式也稱為匹配優(yōu)先,即在可匹配可不匹配時,優(yōu)先嘗試匹配;非貪婪匹配方式也稱忽略優(yōu)先,即在可匹配可不匹配時,優(yōu)先嘗試忽略。這兩種匹配方式總是體現(xiàn)在重復(fù)匹配中,重復(fù)匹配中使用的元字符“?”、“*

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論