日拱一卒|数据挖掘011
建议阅读前,先看下关于爬虫,你需要晓得的正则表达式
本篇推送的源码在GitHub,链接:https://github.com/piyixiaeco/daily-code/blob/master/re.ipynb
Re库是Python的标准库,主要用于字符串匹配。
建议对re库采用raw string类型,此时不用对转义符再次转义。表示为:r'text'
,例如re.search(r'\d{3}-\d{6}',string)
re库的主要功能函数如下:
一、re.search()
re.search(pattern, string, flags=0)
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
- pattern : 正则表达式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正则表达式使用时的控制标记
二、re.match()
re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达,返回match对象
- pattern : 正则表达式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正则表达式使用时的控制标记
对比 re.search()和re.match()
search 方法是从起始位置开始检查,但是它在起始位置不匹配的时候会一直尝试往后检查,直到匹配为止,如果到字符串的末尾还没有匹配,则返回 None
match 方法虽然也从字符串的起始位置开始检查,如果刚好有一个子字符串与正则表达式相匹配,则返回一个Match对象,只要起始位置不匹配则退出,不再往后检查了,返回 None
两者接收参数都是一样的,第一个参数是正则表达式,第二个是预匹配的字符串。此外,不管是 search 还是 match,一旦找到了匹配的子字符串,就立刻停止往后找,哪怕字符串中有多个可匹配的子字符串。
re.search()和re.match()的应用场景
如果是检查文本是否匹配某种模式,比如,检查字符串是不是有效的邮箱地址,则可以使用 match 来判断:
search 方法可用于判断字符串中是否包含有与正则表达式相匹配的子字符串,还可以从中提出匹配的子字符串,例如:
如何解决re.search()和re.match() "一旦找到了匹配的子字符串,就立刻停止往后找,哪怕字符串中有多个可匹配的子字符串。"的问题?此时需要 re.findall() 和 re.finditer() 来帮忙。
三、re.findall()
re.findall(pattern, string, flags=0)
搜索字符串,以列表类型返回全部能匹配的子串
- pattern : 正则表达式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正则表达式使用时的控制标记
注意:re.findall()返回的是列表(list)对象
四、re.finditer()
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
- pattern : 正则表达式的字符串或原生字符串表示
- string : 待匹配字符串
-
flags : 正则表达式使用时的控制标记
注意:re.finditer()返回的对象是由 Match 对象组成的迭代器,因为里面的元素是Match对象,所以要获取里面的邮件地址还需要调用group方法来提取。关于列表和迭代器,这里不展开,以后再写推送讨论。
五、re.split()
re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
- pattern : 正则表达式的字符串或原生字符串表示
- string : 待匹配字符串
- maxsplit: 最大分割数,剩余部分作为最后一个元素输出
-
flags : 正则表达式使用时的控制标记
六、re.sub()
re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
- pattern : 正则表达式的字符串或原生字符串表示
- repl : 替换匹配字符串的字符串
- string : 待匹配字符串
- count : 匹配的最大替换次数
- flags : 正则表达式使用时的控制标记
七、re.compile()
re.compile(pattern, flags=0)
将正则表达式的字符串形式编译成正则表达式对象
- pattern : 正则表达式的字符串或原生字符串表示
- flags : 正则表达式使用时的控制标记
面向对象用法:编译后的多次操作,即可以重复利用正则对象,如果一个正则表达式需要匹配多个字符串,那么就推荐后者,先编译在去匹配。
八、关于 flags
flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:
九、match对象
以上re.search()和re.match()的返回对象对都match对象,re.finditer()返回的每一个迭代元素都是match对象。
re库结束~
参考资料:
1.Python正则表达式--Re库的基本使用
2.python中的正则表达式(re模块)
3.python re库入门(正则表达式)
4.正则表达式完全指南