关于()、[ ]、{}

  (一)、{} 表示重复匹配的次数

  若n>=0, {n}表示匹配确定的n次; {n,}表示至少匹配n次;

  若m>n>=0,{n,m}表示最少匹配n次,最多匹配m次。

import re
s = 'woooow wooow woow wow ww'
print(re.findall('wo{0}w',s))   #['ww']
print(re.findall('wo{0,2}w',s)) #['woow', 'wow', 'ww']
print(re.findall('wo{2}w',s))   #['woow']
print(re.findall('wo{2,}w',s))  #['woooow', 'wooow', 'woow']
View Code

  (二)、[ ] 定义匹配字符的范围

  注意1:按字符逐个匹配

import re
s = 'woooow wooow woow wow ww'
print(re.findall('[ w]',s)) #按字符逐个匹配
#['w', 'w', ' ', 'w', 'w', ' ', 'w', 'w', ' ', 'w', 'w', ' ', 'w', 'w']
View Code

  注意2:[0-9]表示匹配数字0-9

s = '12435fjefj34'
print(re.findall('[0-4]',s)) #匹配数字0-4
#['1', '2', '4', '3', '3', '4']
View Code

  注意3:进行贪婪匹配的时候,需要注意空字符''

s = '12435fjefj34 ,woew'
print(re.findall('[0-9]*',s))
# ['12435', '', '', '', '', '', '34', '', '', '', '', '', '', '']
print(re.findall('[0-9]+',s)) #
# ['12435', '34']
print(re.findall('[0-9]?',s))
# ['1', '2', '4', '3', '5', '', '', '', '', '', '3', '4', '', '', '', '', '', '', '']
print(re.findall('[0-9]',s))
#['1', '2', '4', '3', '5', '3', '4']
View Code

  注意4:[^...] 表示非,取不是[ ]中的字符。

s = 'hello3434'
n = re.findall('[^hello]',s) # '^'非
print(n) # ['3', '4', '3', '4']
View Code

  (三)、() 提取匹配的字符串

  注意1:表达式中若有(),表示仅提取()中的内容

import re
s = 'woooow wooow woow wow ww'
# 提取()内的字符串
print(re.findall('w(\s*)w',s)) # [' ', ' ', ' ', ' ']
print(re.findall('w(o*)w',s)) # ['oooo', 'ooo', 'oo', 'o', '']
View Code

  注意2:()表示分组的概念

  需要重复匹配单个字符,使用*、+等限定符;需要重复匹配字符串,使用(),并得到最后的值。

import re
s = 'wowwooow woow wow www'
# 重复匹配字符串,有几个()结果的几个字符串
ret = re.findall('(wo*w){2}',s) # 匹配满足(wo*w)(wo*w)条件的字符串,并得到最后一个()里内容
print(ret) #['wooow']
View Code

  注意3: ()与 | 连用,表示字符串的 ‘或’

import re
s = 'hello world! 123hallo world!456'
n = re.findall('(he|ha)',s) # '|'或
print(n) # ['he', 'ha']
View Code