正则表达式
应用场景
- 特定规律字符串的查找,切割、替换等
- 特定格式(邮箱、手机号、IP、URL等)的校验
- 爬虫项目中,提取特定内容
使用原则
- 只要使用字符串函数能够解决的问题就不要使用正则
- 正则的效率比较低,同时会降低代码的可读性
- 世界上最难理解的三样东西:医生的处方、道士的神符、码农的正则
- 提醒:正则是用来写的,不是用来读的;在不清楚功能的情况下,不要阅读别人的正则
基本使用
- 说明:正则的解析不是我们来做的,需要借助re模块
- 相关函数:
-
match:只从开头进行匹配,匹配到就返回结果对象,没有找到返回None
-
search:从任意位置匹配,功能同上,都是单次匹配(找到就停)
m = re.search(‘abc’, ‘hadajabcadjlae’)if m:
# 返回匹配的内容
print(m.group())
# 返回匹配内容的位置
print(m.span()) -
findall:全部匹配,返回所有匹配的到结果列表,没有找到返回空列表
f = re.findall(‘abcd’, ‘abcasjdlaabcaksjd;abcasdjla’)
print(f) -
compile:创建正则表达式对象,可以让创建正则对象和内容匹配分开操作
可以先生成正则表达式对象,然后再进行匹配
c = re.compile(‘cba’)
print(type©)从开头匹配
m = c.match(‘cbasdhaj;acbaalsdk’)
从任意位置匹配
m = c.search(‘casdhaj;acbaalsdk’)if m:
print(m.group())匹配所有
f = c.findall(‘ahkjdcbasdkjalcbasakldjacba’)
print(f)
此方式可以分开操作,比较灵活
-