前言:
通过一段时间对基础知识的积累与学习,逐渐的向爬虫更近一步,这次我们主要来了解一下python很重要的正则表达式
1,正则表达式的意义
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
2,正则表达式的函数
使用正则表达式时 先导入re模块
compile()函数 | 编译
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
函数语法
pattern_obj1 = re.compile('(\d+)(\w+)')
match()函数 | 匹配
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
res1 = re.match(pattern_obj1,'123456asdf100')
search()函数 | 查找
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
pattern = re.compile('my')
res2 = re.search(pattern,'zhiyoumy')
macth和search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
sub()函数 |替换
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
函数语法:
pattern2= re.compile('\d+')
print(re.findall(pattern2,'1abc234oo99'))
pattern3 = re.compile('\n')
print(re.sub(pattern3,'-','a\nb\nc'))
3,正则表达式中的字符
/d | 表示匹配一个数字 |
+ | 表示前面的字符至少出现一次 不能为0 |
\w | 表示匹配一个数字或字母 |
^ | 表示以什么开头 |
$ | 表示以什么结尾 |
. | 可以匹配到某一个字符后跟的任意一个字符 |
* | 可以匹配前面一个字符0个或任意一个字符 |
.* | 表示任意字符出现多次 或0次 贪婪函数 |
.+ | 表示任意字符至少出现一次 不能为0 贪婪函数 |
.*? | 在匹配成功的前提下,尽可能匹配少的字母 非贪婪函数 |
常用语法:
pattern_obj2 = re.compile('(^a.*b$)')
# 下一句代码输出的结果为none 因为没有匹配的字符
print(re.match(pattern_obj2,'abdsdsdaooobbddd'))
# .* 称为贪婪模式,尽可能多的匹配
pattern_obj2 = re.compile('(a.*b)')
print(re.match(pattern_obj2,'abdsdsdaooobbddd').group(1))
print('--------------------------------------------------------')
# .*?称为非贪婪模式,在匹配成功的前提下,尽可能匹配少的匹配字母
# pattern_obj3 = re.compile('(a.*?b)')
# print(re.match(pattern_obj3,'accccdsdbbbbsdsd').group(1))
pattern_obj3 = re.compile('.*?(b.*?b)')
print(re.match(pattern_obj3,'aa123bbfddibs').group(1))
print('========================================================')
#match函数,要查找的字符串必须要位于开头位置才能查找成功
pattern_obj4 = re.compile('zhiyou')
res4 = re.match(pattern_obj4,'zhiyou100')
# res4 = re.match(pattern_obj4,'100zhiyou100')
# res4 = re.match(pattern_obj4,'100zhiyou100')
print(res4)
print('**********************************************************')
# .+表示任意字符至少出现一次 不能为0 Python默认的是贪婪模式
pattern_obj5 = re.compile('(a.+d)')
# print(re.match(pattern_obj5,'a12313dddghfdhf').group(1))
print(re.match(pattern_obj5,'a1d').group(1))
好的,目前所学掌握的不多!文章将会慢慢的添加修改!
今天又是元气满满的一天。明天加油干!