python正則表達式(\ [ ])(三)


對元字符的轉義:

反斜杠\在正則表達式中有多種用途。

比如,我們要在下面的文本中搜索,所有點前面的字符串,也包含點本身。

蘋果.是綠色的
橙子.是橙色的
香蕉.是黃色的

 如果,我們這樣寫正則表達式.*.,聰明的你肯定發現不對勁

因為點是一個元字符,直接出現在正則表達式中,表示匹配任意的單字符,不能表示.這個字符本身的意思了

如果我們要搜索的內容本身就包含元字符,就可以使用反斜杠進行轉義

這里我們就應使用這樣的表達式:.*\.

示例,python程序如下:

content='''
蘋果.是綠色的
橙子.是橙色的
香蕉.是黃色的
'''
import re
p=re.compile(r' .*\.')
for one in p.findall(content):
    print(one)

 匹配某種字符類型

反斜杠后面接一下字符,表示匹配某種類型的一個字符

比如

\d 匹配0-9之間任意一個數字字符,等價於表達式[0-9]

\D 匹配任意一個不是0-9之間的數字字符,等價於表達式[^0-9]

\s 匹配任意一個空白字符,包括 空格,tab,換行符等,等價於表達式[\t\n\r\f\v]

\S 匹配任意一個非空白字符,等價於表達式[^\t\n\r\f\v]

\w 匹配任意一個文字字符,包括大小寫字母,數字,下划線,等價於表達式[a-zA-Z0-9_]

\W 匹配任意一個非文字字符,等價於表達式[^a-zA-Z0-9_]

\b:

It's a nice day today.

'I' 占一個位置,'t' 占一個位置,所有的單個字符(包括不可見的空白字符)都會占一個位置,這樣的位置我給它取個名字叫“顯式位置”。

注意:字符與字符之間還有一個位置,例如 'I' 和 't' 之間就有一個位置(沒有任何東西),這樣的位置我給它取個名字叫“隱式位置”。

“隱式位置”就是 \b 的關鍵!通俗的理解,\b 就是“隱式位置”。

此時,再來理解一下這句話:

如果需要更精確的說法,\b 匹配這樣的位置:它的前一個字符和后一個字符不全是(一個是,一個不是或不存在) \w。

我用我的話來翻譯一下這句話:

“隱式位置” \b,匹配這樣的位置:它的前一個“顯式位置”字符和后一個“顯式位置”字符不全是 \w。

python代碼示例:

import re

s="i love you not because 12sd 34er 56df e4 54434"

content=re.findall(r"\b\d",s)

print (content)'''['1', '3', '5', '5']'''



import re

s="i love you not because 12sd 34er 56df e4 54434"

content=re.findall(r"\d",s)

print (content)
'''['1', '2', '3', '4', '5', '6', '4', '5', '4', '4', '3', '4']'''

  

反斜杠也可以用在方括號里面,比如[\s,.]表示匹配:任何空白字符,或者逗號,或者點

舉例:

source=''' 
王亞輝
tony
劉文武
'''
import re
p=re.compile(r'\w{2,4}',re.A)
print (p.findall(source))



'''['tony']'''

  

 

方括號-匹配某幾種類型

方括號表示要匹配某幾種類型的字符

比如

[abc]可以匹配a,b,或者c里面的任意一個字符,等價於[a-c]

[a-c]中間的-表示一個范圍從a到c

如果你想匹配所有的小寫字母,可以使用[a-z]

一些元字符在方括號內失去了魔法,變得和普通字符一樣了

比如,

[akm.]匹配 a k m . 里面任意一個字符

這里 . 在括號里面不在表示匹配任意字符了,而是表示匹配 . 這個字符

起始位置

^表示匹配文本的起始位置

如果是多行模式,表示匹配文本每行的開頭位置

比如,你要從下面的文本中,選擇每行逗號前面的字符串,也包括逗號本身

蘋果,蘋果是綠色的
橙子,橙子是橙色的
香蕉,香蕉是黃色的

 就可以這樣寫正則表達式^.*.

 

如果在方括號中使用^,表示非 方括號里面的字符集合([^\d],表示,選擇非數字的字符)

比如:

content='a1b2c3d4e5'
import re
p=re.compile(r'[^\d]')
for one in p.findall(content):
    print(one)

'''
輸出結果:
a
b
c
d
e
'''

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM