对于正则表达式其实网上有很多说明,而且各种校验都比较全面了,很多时候其实不需要我们写,直接网上搜。但当我们拿到一个正则表达式时,我们要能看懂。所以,下面给出一个常用操作符,忘记了可以看看。
系列文章
Python 学习 01 —— Python基础
Python 库学习 —— urllib 学习
Python 库学习 —— BeautifulSoup4学习
Python 库学习 —— Re 正则表达式
Python 库学习 —— Excel存储(xlwt、xlrd)
Python 学习 02 —— Python爬虫
Python 库学习 —— Flask 基础学习
Python 学习03 —— 爬虫网站项目
正则表达式常用操作符
Re库主要功能函数
对Re库我们主要会用到search()、findall()、sub(),下面进行说明。
举例:
import re
# search 返回一个match对象
# 方式1:先编译,再对编译的进行搜索
pat = re.compile("AA")
print(pat.search("ABCA")) # 没找到匹配的,输出 None
print(pat.search("ABCAA")) # 有匹配,输出 <re.Match object; span=(3, 5), match='AA'>
# 方式2:直接搜索
print(re.search("[0-9]", "A0B1C2")) # re.search(正则表达式, 被校验的字符串)
# findall(正则表达式, 被校验字符串),返回匹配的列表
print(re.findall("[A-Z]+", "ABabCd")) # 输出 ['AB', 'C']
# sub(str1, str2, str3):在str3中找str1,并用str2替换
print(re.sub("a", "A", "abcABCaA")) # 输出 AbcABCAA
# 建议在正则表达式中,被比较的字符串前面加r,这样就不用担心转义字符的问题。
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志,作为上面几个方法的参数。
如果要加入多个标志,可以用|
指定。例如re.l|re.M
。
举例:
正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配。这里的“行”是以“\n”进行区分的。
下面的例子中,字符串a第一行末尾有字符"\n",如果不使用re.S参数,则只在第一行内进行匹配。显然第一行无法匹配,所以换到第二行重新开始,不会跨行。
使用re.S参数以后,正则表达式会将a字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。
a = '''hellopass:
worldaf
'''
b = re.findall('hello(.*?)world', a) # (.*?)表示 任意个字符
c = re.findall('hello(.*?)world', a, re.S)
print('b is ', b) # 输出 b is []
print('c is ', c) # 输出 c is ['pass:\n ']