正则表达式
- 原子
- 普通字符
import re pattern="yue" string="http://yum.iqianyue.com" result1=re.search(pattern,string) print(result1)
-
- 非打印字符
- \n \t
- 通用字符作为原子
- \w 匹配任意一个字母,数字或者下划线
- \W 匹配除字母、数字和下划线以外的一个任意字符
- \d 匹配任意一个十进制数
- \D 匹配除十进制数以外的任意一个其他字符
- \s 匹配任意一个空白字符
- \S 匹配除空白字符以外的任意一个其他字符
- 非打印字符
import python pattern="\w\dpython\w" string="abcdfphp345pythony_py" result1=re.search(pattern,string) print(result)
-
- 原子表 [xyz] 这个原子表中定义了3个原子,这3个原子的地位平等
- 元字符
- 任意匹配元字符
- 边界限制元字符
- 限定符
- 模式选择符
- 模式单元符
- 模式修正 在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义。
- 匹配时忽略大小写 I
- 多行匹配 M
- 做本地化识别匹配 L
- 根据Unicode字符及解析字符 U
- 让.匹配包括换行符,即用了该模式修正后,"."匹配就可以匹配任意的字符了
-
import re pattern1="python" pattern2="python" string=''abcdfphp345Pythony_py" result1=re.search(pattern1,string) result2=re.search(pattern2,string,re.I) print(result1) print(result2) 结果 None <_sre.SRE_Match object; span=(11,17),match="Python">
-
- 贪婪模式与懒惰模式
- 贪婪模式的核心点就会尽可能多的匹配,懒惰模式的核心点就是尽可能少地匹配
- 像“”p.*y“” 贪婪模式 .*?懒惰模式
- 正则表达式常见函数
- re.match()
- 如果想从元字符串的起始位置匹配一个模式,可以使用re.match()
- 格式 re.match(pattern,string,flag)
- match的一些方法
- 如果想从元字符串的起始位置匹配一个模式,可以使用re.match()
- re.match()
1.string是匹配时所用的文本
2.start可以返回指定的组在字符串中开始匹配的位置,默认值为0
3.end返回指定的组在字符串中开始匹配的位置,默认值为0
4.pos,endpos用于返回起始和终止匹配位置
5.group可以返回指定组的起始匹配位置
6.groupdict返回有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。
7.lastgroup返回最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
8.lastindex返回最后一个分组在文本中的索引
9.span 返回(start(group), end(group)),即该组的起始和终止位置
10.expand可以实现分组之间顺序的调整
-
- re.search()函数
- 扫描整个字符串并进行相应的匹配,re.match()函数最大的不同是,re.match()函数从源字符串的开头进行匹配, 而re.search()函数会在全文中进行检索并匹配
- 全局匹配函数
- 用re.compile()对正则表达式进行预编译
- 编译后,使用findall()根据正则表达式从源字符串中将匹配的结果全部找出
- re.sub()函数
- 根据正则表达式来实现替换某些字符串的功能。
- 格式:re.sub(pattern,rep,string,max) 第一个参数为对应的正则表达式,第二个参数为要替换成的字符串,第三个参数为原字符串,第四个参数为可选项。
- re.search()函数
- 实例解析
- 匹配.com或.cn后缀的url网址
-
import re pattern="[a-zA-Z]+://[^\s]*[.com|.cn]" string="<a href='http://www.baidu.com'>百度首页</a>" result=re.search(pattern,string) print(result)
-
- 匹配.com或.cn后缀的url网址
-
- 匹配电话号码
-
import re pattern="\d{4}-\d{7}|\d{3}-\d{8}" string="021-672313231232132" result=re.search(pattern,string) print(result)
-
- 匹配电话号码