特殊字符
所謂特殊字符,就是一些有特殊含義的字符。如果匹配這些特殊字符,必須首先使字符'轉義',即,將反斜杠字符\
放在他們的前面,下表列出了正則表達式中的特殊字符:
特殊字符 | 描述 |
---|---|
() | 標記一個子表達式的開始和結束為止。子表達式可以獲取供以后使用。匹配這些字符,請使用\( 和\) |
. | 匹配除換行符\n 之外的任何單字符。要匹配. 需要使用\. |
[ | 標記一個中括號表達式的開始。要匹配[ 需要使用\[ |
\ | 將下一個字符標記為或特殊字符、或原義字符、或向后引用、或八進制轉義符。例如:'n'匹配字符'n','\n'匹配換行符,\\ 匹配\ ,而\( 則匹配( |
{ | 標記限定符表達式的開始。要匹配{ 需要使用\{ |
| | 指明兩項之間的一個選擇(或者)。要匹配| 需要使用\| |
[0-9] | 匹配任何數字。等價於\d |
()
import re
#():用來表示一個分組
m = re.search(r'h(\d+)x','sh829xkflsa')
print(m.group(1)) #829
#\(.*\):匹配字符串中括號的內容
m1 = re.search(r'\(.*\)','(1+1)*3+5')
print(m1.group()) #(1+1)
.
import re
#. 表示匹配除了換行以外的任意字符
print(re.search(r'.','zhang')) #z
#如果想要匹配 . 需要使用 \.
print(re.search(r'\.','0123.456')) #.
[]
import re
#[]:用來表示可選項范圍
print(re.search(r'a[0-5]w','pda4wawdmaf'))
#<re.Match object; span=(2, 5), match='a4w'>
print(re.search(r'a[a-z]w','pdacwawdmaf'))
#<re.Match object; span=(2, 5), match='acw'>
#1、[]是用來指定匹配單個字符的范圍,可以填寫數字例如:0-9,或者字母a-z、A-Z,默認匹配一次
#2、[]的匹配范圍包括字符串首尾所在下標
print(re.search(r'[a-d]','123456c'))
#<re.Match object; span=(6, 7), match='c'>
#3、[]內匹配次數增加,可以搭配+使用
print(re.search(r'[0-5]+','as1534ad'))
#<re.Match object; span=(2, 6), match='1534'>
#4.[]中括號內不使用 + 來增加次數,那么中括號內的規則只會匹配單個字符,而不可以匹配多個字符
print(re.search(r'[135]','135'))
#<re.Match object; span=(0, 1), match='1'>
#5、[]內不局限於僅匹配字母或僅匹配數字,可以將兩者進行`或`關系處理,進一步增大匹配規則范圍
print(re.search(r'[0-5a-dx]+','1345acx'))
#<re.Match object; span=(0, 7), match='1345acx'>
#[0-5a-dx]:匹配范圍為0-5數字、a-d字母、字母x
$
import re
#$:用於匹配所檢索字符串的最后一個字符,默認檢索字符串的最后一個字符為空格
print(re.search(r'$','123456c'))
#<re.Match object; span=(7, 7), match=''>
#1、$在使用re.M后可以對於檢索字符串中的每一行的最后一個字符進行匹配
print(re.findall(r'$','zhang\n zhuo\n wei',re.M))
#['', '', '']
#2、$一般配合其他正則字符進行匹配效果更好
print(re.findall(r'.$','zhang\n zhuo\n wei',re.M))
#['g', 'o', 'i']
|
import re
#|:豎線的作用是'或'的意思,即可以可以匹配豎線分隔的左右字符或字符串
print(re.search(r'f(x|p|t)m','psafxm'))
#<re.Match object; span=(3, 6), match='fxm'>
print(re.search(r'f(x|p|t)m','psafpm'))
#<re.Match object; span=(3, 6), match='fpm'>
print(re.search(r'f(x|prz|t)m','psafprzm'))
#<re.Match object; span=(3, 8), match='fprzm'>
#|和[]的區別在於:中括號表示的范圍,而豎線則表示的是可選值