Python正則表達(dá)式教程之一:基礎(chǔ)篇
前言
之前有人提了一個(gè)需求,我一看此需求用正則表達(dá)式最合適不過。考慮到之前每次使用正則表達(dá)式,都是臨時(shí)抱佛腳,于是這次我就一邊完成任務(wù)一邊系統(tǒng)的學(xué)習(xí)了一遍正則表達(dá)式。主要參考PyCon2016上的一個(gè)視頻Regular Expressions。
我將分幾篇文章對(duì)正則表達(dá)式進(jìn)行總結(jié)。
以下是第一部分,基礎(chǔ):
基礎(chǔ)部分
這里總結(jié)了正則表達(dá)式最基礎(chǔ)的用法,其中大部分內(nèi)容對(duì)我(以及大部分程序員)來說都是平時(shí)經(jīng)常用到的,所以我就一筆帶過了,只對(duì)其中的幾處用例子說明。
. 除了換行之外的其他所有字符
^ 行首
$ 行尾
[abcd] abcd其中的一個(gè)字符
[^abcd] 除了abcd之外的任意字符
[a-d] 相當(dāng)于[abcd]
[a-dz] 相當(dāng)于[abcdz]
\b 單詞邊界
\w 字母數(shù)字或下劃線 相當(dāng)于[a-zA-Z0-9_]
\W 與\w相反
\d 數(shù)字,相當(dāng)于[0-9]
\D 與\d相反
\s 空白字符,相當(dāng)于[ \t\n\r\f\v]
\S 與\s相反
{5} 在此之前的正則表達(dá)式部分(下同)準(zhǔn)確的出現(xiàn)5次
{2,5} ~出現(xiàn)2到5次
{2,} ~出現(xiàn)2次或多次
{,5} ~出現(xiàn)0到5次
* ~出現(xiàn)0次或多次
? ~出現(xiàn)0次或1次
+ ~出現(xiàn)1次或多次
ABC|DEF 匹配ABC或者DEF
\ 轉(zhuǎn)義字符,如\表示匹配*,\$表示匹配$*
\b、 \用以下幾個(gè)例子簡(jiǎn)單說明一下:
\b:
>>> re.search(r'\bhello\b', 'hello') <_sre.SRE_Match object; span=(0, 5), match='hello'> >>> re.search(r'\bhello\b', 'hello world') <_sre.SRE_Match object; span=(0, 5), match='hello'> >>> re.search(r'\bhello\b', 'hello,world') <_sre.SRE_Match object; span=(0, 5), match='hello'> >>> re.search(r'\bhello\b', 'hello_world') >>>
其實(shí)這里,\b大體上和\W一支,但是\b可以匹配行首行尾等非顯示類的字符,而\W不可以。
\:
>>> re.search(r'\$100', '$100') <_sre.SRE_Match object; span=(0, 4), match='$100'> >>> re.search(r'$100', '$100') >>>
想要匹配那些在正則表達(dá)式中有特殊含義的字符,如$、^、*等,就需要用\進(jìn)行轉(zhuǎn)義。
raw string:
另外,前面例子中,模式字符串(pattern)前面都加了一個(gè)r,這個(gè)r的意思是raw string,后面所接的字符串,Pyhton解釋器無需對(duì)其進(jìn)行轉(zhuǎn)義。因?yàn)?,\在Python字符串中和正則表達(dá)式中都有特殊含義,所以如果不是raw string,那么要表達(dá)一個(gè)\字符,就需要四個(gè)\了(在Python解釋器中先轉(zhuǎn)義一次,2個(gè)\表示1個(gè)\,剩下2個(gè)\,在正則表達(dá)式中又轉(zhuǎn)義一次,最終剩下一個(gè)\)。例如:
>>> re.search(r'\bhello\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search('\bhello\b', 'hello')
>>> re.search('\\bhello\\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search('\\\\hello\\\\', '\\hello\\')
<_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
>>> re.search(r'\\hello\\', '\\hello\\')
<_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
>>> print('\\hello\\')
\hello\
總結(jié)
以上就是關(guān)于Python正則表達(dá)式之基礎(chǔ)的全部?jī)?nèi)容了,有了這些知識(shí),正則表達(dá)式的基本運(yùn)用就沒什么問題了。對(duì)于一些特殊情況,還需要掌握另外一些高級(jí)用法,敬請(qǐng)期待后續(xù)文章。希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,如果有疑問大家可以留言交流。
相關(guān)文章
Python自動(dòng)錄入ERP系統(tǒng)數(shù)據(jù)
這篇文章主要介紹了Python如何自動(dòng)錄入ERP系統(tǒng)數(shù)據(jù),用Python解決Excel問題的最佳方法,文章中有詳細(xì)的代碼示例,需要的朋友可以參考閱讀2023-04-04
Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人
這篇文章主要介紹了Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人,下文圍繞利用Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下2022-02-02
深度學(xué)習(xí)Tensorflow2.8實(shí)現(xiàn)GRU文本生成任務(wù)詳解
這篇文章主要為大家介紹了深度學(xué)習(xí)Tensorflow?2.8?實(shí)現(xiàn)?GRU?文本生成任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
使用Python實(shí)現(xiàn)ELT統(tǒng)計(jì)多個(gè)服務(wù)器下所有數(shù)據(jù)表信息
這篇文章主要介紹了使用Python實(shí)現(xiàn)ELT統(tǒng)計(jì)多個(gè)服務(wù)器下所有數(shù)據(jù)表信息,ETL,是英文Extract-Transform-Load的縮寫,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、轉(zhuǎn)換(transform)、加載(load)至目的端的過程,需要的朋友可以參考下2023-07-07
Tensorflow中批量讀取數(shù)據(jù)的案列分析及TFRecord文件的打包與讀取
這篇文章主要介紹了Tensorflow中批量讀取數(shù)據(jù)的案列分析及TFRecord文件的打包與讀取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
python簡(jiǎn)單的三元一次方程求解實(shí)例
這篇文章主要介紹了python簡(jiǎn)單的三元一次方程求解實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04

