Python正则表达式详解( 二 )


代码如下:
string1 = "shentouyun3215454biji"pat1 = "shen.ou"#这里.匹配除了换行符外的任意字符ret=re.search(pat1,string1)print(ret)运行结果
<_sre.SRE_Match object; span=(0, 7), match='shentou'>当然你也可以多匹配些 , 比如多些点点 。
string1 = "shentouyun3215454biji"pat1 = "shen......"ret=re.search(pat1,string1)print(ret)运行后
<_sre.SRE_Match object; span=(0, 10), match='shentouyun'>开始位置^与结束位置$
string1 = "shentouyun3215454biji"pat1 = "^s..."ret=re.search(pat1,string1)print(ret)运行后<_sre.SRE_Match object; span=(0, 4), match='shen'>因为s是开始 , 也就是“排头”结束位置也同理 。
string1 = "shentouyun3215454biji"pat1 = "b...$"ret=re.search(pat1,string1)print(ret)运行后<_sre.SRE_Match object; span=(17, 21), match='biji'>*""0次1次多次**
string1 = "shentouyun3215454biji"pat1 = "shen.*"ret=re.search(pat1,string1)print(ret)运行后<_sre.SRE_Match object; span=(0, 21), match='shentouyun3215454biji'>为什么会全匹配 , 看*号的定义为多次 , 咱们的"."表示除了换行外全匹配 , 两者一配合 。
+号与?号
+匹配多次 , 正常显示无法匹配0次 , 演示错误例子 。
string1 = "shentouyun3215454biji"pat1 = "a+"ret=re.search(pat1,string1)print(ret)None演示正确例子
string1 = "aaaaaaaaaaaa"pat1 = "a+"ret=re.search(pat1,string1)print(ret)<_sre.SRE_Match object; span=(0, 12), match='aaaaaaaaaaaa'>问号就更好弄了
问号直接演示错误例子 , 无法显示多次
string1 = "aaaafsedfsfdffasafadaaaaaaaa"pat1 = "a?"ret=re.search(pat1,string1)print(ret)<_sre.SRE_Match object; span=(0, 1), match='a'>{n}与{n,}
string1 = "aaaa"pat1 = "a{4}"ret=re.search(pat1,string1)print(ret)<_sre.SRE_Match object; span=(0, 4), match='aaaa'>如果换成3呢
<_sre.SRE_Match object; span=(0, 3), match='aaa'>打印了三次 , 成功演示了什么叫做至少 , 当然你多了不行 , 改成5试试 。
None{n,m}至少多少次 , 至多多少次
string1 = "aaaa"pat1 = "a{3,5}"ret=re.search(pat1,string1)print(ret)<_sre.SRE_Match object; span=(0, 4), match='aaaa'>模式修正符
所谓的模式修正符 , 即可以在不改变正则表达式的情况下 , 通过模式修正符改变正则表达式的含义 , 从而实现一些匹配结果的调整等功能 。
模式修正符有什么?
I忽略大小写
M多行匹配
L本地化识别匹配
U unicode编码
S让 , 匹配包括换行符
错误代码演示
string = "ShenTouYun"pat="shen"ret = re.search(pat,string)print(ret)返回None , 因为默认有大小写限制 , 引用一下I就可以了 。
string = "ShenTouYun"pat="shen"ret = re.search(pat,string,re.I)print(ret)运行结果
<_sre.SRE_Match object; span=(0, 4), match='Shen'> 
贪婪模式与懒惰模式
贪婪模式的核心点就是尽可能多的匹配
懒惰模式的核心就是尽可能少的匹配
贪婪模式
string = "SheSnTouYunYS"pat="s.*S"ret = re.search(pat,string,re.I)print(ret)运行结果
<_sre.SRE_Match object; span=(0, 13), match='SheSnTouYunYS'>贪婪模式与懒惰模式有什么用呢?
看对比
string = "SheSnTouYunYS"pat="s.*S"#贪婪模式找到最后一个spat1="s.*?S"#懒惰模式,特征为? , 找到第一个s就不往下找了ret = re.search(pat,string,re.I)ret1 = re.search(pat1,string,re.I)print(ret)print(ret1)运行结果
<_sre.SRE_Match object; span=(0, 13), match='SheSnTouYunYS'><_sre.SRE_Match object; span=(0, 4), match='SheS'> 
正则表达式函数
1、re.match( )函数从头开始匹配
2、re.search( )函数从任何地方开始匹配
3、全局匹配函数
match函数演示
string1 = "a**fewfaaa"pat1 = "a"ret=re.match(pat1,string1)print(ret)运行结果可匹配<_sre.SRE_Match object; span=(0, 1), match='a'>不是第一个开始匹配
string1 = "a**fewfaaa"pat1 = "d"ret=re.match(pat1,string1)print(ret)运行结果不可匹配None 
全局匹配函数


推荐阅读