對元字符的轉義:
反斜杠\在正則表達式中有多種用途。
比如,我們要在下面的文本中搜索,所有點前面的字符串,也包含點本身。
蘋果.是綠色的 橙子.是橙色的 香蕉.是黃色的
如果,我們這樣寫正則表達式.*.,聰明的你肯定發現不對勁
因為點是一個元字符,直接出現在正則表達式中,表示匹配任意的單字符,不能表示.這個字符本身的意思了
如果我們要搜索的內容本身就包含元字符,就可以使用反斜杠進行轉義
這里我們就應使用這樣的表達式:.*\.
示例,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 '''