原子
原子为正则表达式中最基本的组成单位
import re
# 普通字符做原子
s = "hello"
p="he"
r = re.search(p,s)
print(r)
# 非打印字符,如\n \t
s = "mmmmmmm"
p = "\n"
r = re.search(p,s)
print(r)
# 通用字符作为原子
'''
\w 字母,数字,下划线
\W 除字母,数字,下划线
\d 十进制数字
\D 除十进制数字
\s 空白字符
\S 除空白字符
'''
s="mmmm123456789aaaaa"
p="\w\d\d"
r = re.search(p,s)
print(r)
# 原子表
s="abcamcbdcadc"
p="a[db]c" # 在两个字符里选一个
p2 = "a[^bd]c" # ^代表非
r = re.search(p,s)
r2 =re.search(p2,s)
print(r)
print(r2)
元字符
正则表达式中有特殊含义的字符
import re
'''
. 除换行外任意一个字符
^ 开始位置
$ 结束位置
* 0/1/多次
? 0/1次
+ 1/多次
{n} 恰好n次
{n, } 至少n次
{n,m} 至少n次,至多m次
| 模式选择符 或
() 模式单元
'''
s="nihaooooawoojiao"
p="ni..."
p1 = "j...$"
p2 = "^.i..."
p3="ni.*"
p4="wo+"
p5 = "hao{4}"
p6 = "hao{1,2}"
r = re.search(p,s)
r1 = re.search(p1,s)
r2 = re.search(p2,s)
r3 = re.search(p3,s)
r4 = re.search(p4,s)
r5 = re.search(p5,s)
r6 = re.search(p6,s)
print(r)
print(r1)
print(r2)
print(r3)
print(r4)
print(r5)
print(r6)
模式修正符
可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式含义,从而实现一些匹配结果的调整
import re
'''
I 匹配时忽略大小写
M 多行匹配
L 本地化识别匹配
U unicode
S 让 . 匹配包括\n
'''
s = "Python"
p="py"
r = re.search(p,s,re.I)
print(r)
贪婪模式与懒惰模式
贪婪模式:尽可能多的匹配
懒惰模式:尽可能少的匹配
import re
s="pythony"
p1="p.*y" # 贪婪模式
p2 = "p.*?y" # 懒惰模式
r1 = re.search(p1,s)
r2 = re.search(p2,s)
print(r1)
print(r2)
正则表达式函数
import re
# re.match() 从头开始匹配
# re.search() 任何位置都可以开始匹配
s="python12yhdqpnypionuyio234wjop"
p ="hd"
r1 = re.search(p,s)
r2 = re.match(p,s)
print(r1)
print(r2)
# 全局匹配 re.compile(正则表达式).findall(数据)
p1 = "p.*?y"
r = re.compile(p1).findall(s)
print(r)
# re.sub() 替换
p1 = "\d+"
p2 = "999"
r= re.sub(p1,p2,s)
print(r)
常见正则表达式实例