天天看點

正規表達式模式 | 手把手教你入門Python之八十八

上一篇: 正則修飾符的使用 | 手把手教你入門Python之八十七 下一篇: 正規表達式練習 | 手把手教你入門Python之八十九 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

正規表達式模式

下表列出了正規表達式模式文法中的特殊元素,如果你使⽤模式的同時提供了可選的标志參數,某些模式元素的含義會改變。

⾮列印字元

⾮列印字元也可以是正規表達式的組成部分。下表列出了表示⾮列印字元的轉義序列:

正規表達式模式 | 手把手教你入門Python之八十八
import re

# \s  表示任意的空白字元
print(re.search(r'\s', 'hello world'))  # 空格
print(re.search(r'\n', 'hello\nworld'))  # 換行
print(re.search(r'\t', 'hello\tworld'))  # 制表符

# \S  表示非空白字元
print(re.search(r'\S', '\t\n   x'))           

特殊字元

所謂特殊字元,就是⼀些有特殊含義的字元。若要比對這些特殊字元,必須⾸先使字元"轉義",即,将反斜杠字元 放在它們前⾯。下表列出了正規表達式中的特殊字元:

正規表達式模式 | 手把手教你入門Python之八十八
# 标點符号的使用:

# ():用來表示一個分組
m = re.search(r'h(\d+)x', 'sh829xkflsa')
print(m.group(1))
# 如果要表示括号,需要使用 \
m1 = re.search(r'\(.*\)', '(1+1)*3+5')
print(m1.group())

# . 表示比對除了換行以外的任意字元。如果想要比對 . 需要使用 \.

# [] 用來表示可選項範圍  [x-y]從x到y區間,包含x和y
# m2 = re.search(r'f[a-d]m', 'pdsfcm')
# m2 = re.search(r'f[0-5]m', 'pdsf4m')
# m2 = re.search(r'f[0-5]+m', 'pdsf40m')
m2 = re.search(r'f[0-5a-dx]m', 'pdsfxm')  # 0<=value<=5 或者 a<=value<=d或者value==x
print(m2)

# | 用來表示或者  和  [] 有一定的相似,但是有差別
# [] 裡的值表示的是區間,而且是單個字元
# | 就是可選值,可以出現多個值
print(re.search(r'f(x|prz|t)m', 'pdsfprzm'))

# {} 用來限定前面元素出現的次數
# {n}:表示前面的元素出現 n 次
print(re.search(r'go{2}d', 'good'))
# {n,}:表示前面的元素出現 n 次以上
print(re.search(r'go{2,}d', 'gooooood'))
# {,n}:表示前面的元素出現 n 次以下
print(re.search(r'go{,2}d', 'gd'))
# {m,n}:表示前面的元素出現m到n次
print(re.search(r'go{3,5}d', 'gooood'))           
import re

# 字母表示它本身,很多字母前面  \ 會有特殊含義

# \n:表示換行   \t:表示一個制表符  \s:空白字元  \S:非空白字元
# \d:表示數字,等價于 [0-9]
print(re.search(r'x\d+p', 'x243p'))
print(re.search(r'x[0-9]+p', 'x243p'))

# ^ 除了表示以指定的内容開始以外,在 [] 裡還可以表示取反
# \D:表示非數字,等價于 [^0-9]
print(re.search(r'\D+', 'he110'))
print(re.search(r'[^0-9]+', 'he110'))

# \w:表示數字、字母、 _ 以及中文等   非标點符号
print(re.findall(r'\w+', 'h+E-11.0_X*'))
print(re.findall(r'\w+', '大,家+好!'))

# \W: \w 取反
print(re.findall(r'\W+', 'h+E-11.0_X*'))           

定位符

定位符使您能夠将正規表達式固定到⾏⾸或⾏尾。它們還使您能夠建立這樣的正規表達式,這些正規表達式出現在⼀個單詞内、在⼀個單詞的開頭或者⼀個單詞的結尾。

定位符⽤來描述字元串或單詞的邊界,

^

$

分别指字元串的開始與結束,

\b

描述單詞的前或後邊界,

\B

表示⾮單詞邊界。

正規表達式的定位符有:

正規表達式模式 | 手把手教你入門Python之八十八
# ^:以指定的内容開頭   $:指定内容結尾
print(re.search(r'^a.*i$', 'aofi'))           

限定符

限定符⽤來指定正規表達式的⼀個給定元件必須要出現多少次才能滿⾜比對。有

*****

+

?

{n}

{n,}

{n,m}

共6種。

正規表達式的限定符有:

正規表達式模式 | 手把手教你入門Python之八十八
# *:表示前面的元素出現任意次數(0次及以上) 等價于  {0,}
x = re.search(r'go*d', 'goooooooooooooooooooooooooooooooooooooooooooooooooooooooooood')
print(x.group())

# +:表示前面的元素至少出現一次,等價于 {1,}
print(re.search(r'go+d', 'goood'))

# ?:兩種用法:
# 1.規定前面的元素最多隻能出現一次,等價于 {,1}
# 2.将貪婪模式轉換成為非貪婪模式
print(re.search(r'go?d', 'god'))           

示例:

re.search(r'\s','⼤家好 我是 代碼') # 比對所有的空字元
re.search(r'\S','⼤家') # 比對所有的⾮空字元
re.search(r'\n','⼤家好\n我是代碼') # 比對換⾏
re.search(r'n$','hello python') # 比對以 n 結尾
re.search(r'^h.+n$','hello python') # 比對以 h 開頭,中間出現⼀次或多次任意字元,并且以n結尾
re.search(r'^ha*','h') # 比對以 h 開頭,a出現0次或者⼀次           

配套視訊