元字符,单个字符匹配
. 匹配除换行符以外的任意字符
\w 匹配字母数字下划线(word)
\s 匹配任意空白符 (space)
\d 匹配数字 (digit)
大写则为非
\W 非字母数字下划线 [\W\w] [\S\s] [\D\d] 可匹配全局
\S 非空白
\D 非数字
\n 匹配换行符
\t 匹配制表符
\b 匹配结尾 hello\b
^ 匹配开头
$ 匹配结尾
a|b a或者b
[^..] 除去哪些不匹配
量词的使用
* 匹配0次或多次
+ 匹配1次或多次
? 匹配0次或1次
{n} 匹配n次
{n,} 匹配n次或更多次
{n,m} 匹配n到m次
在量词后面加?为惰性匹配
分组:
() 需要将几个约束集中在一起约束
import re
# findall
# search
# match
ret = re.findall('[a-d]','hello world') # 前面放匹配规则,后面放匹配字符串
print(ret)
ret = re.search('a','abc bca') # 只匹配到第一个后就返回,调用group()方法得到结果。
if ret: print(ret.group()) # 匹配不到返回None,调用group() 会报错
ret = re.match('ev','eva egon yuan')
if ret: print(ret.group()) # 只从整串字符串开头匹配,中间的匹配不到。同样需要group()方法
# split
ret = re.split('[ab]','abcd') # 先按a分割,再按b分割 ['','bcd']
print(ret)
['', '', 'cd']
# sub
ret = re.sub('\d','H','ads4vdef3vve2',1) # 将数字替换成 H,1 表示 只替换1处
print(ret)
ret = re.subn('\d','H','ads4vdef3vve2') # 将数字替换成 H,返回元祖以及替换次数
print(ret)
# compile
obj = re.compile('\d{3}')
# 将正则表达式编译成一个 正则表达式对象。
ret = obj.search('abc123eee')
print(ret.group())
# finditer
ret = re.finditer('\d','sa2dv3vf4btf5bg678') # finditer() 返回一个迭代器,同样需要用group()方法
print(ret) # <callable_iterator object at 0x000001BABCB10208>
for i in ret:
print(i.group())