正则表达式是用来处理字符串的,可以用来对字符串进行检索、替换、匹配等
正则表达式
感觉单从理论上说正则表达式太过于抽象,直接举一个例子可能更方便理解。
这里只记录通用匹配,因为暂时感觉实用性更高,如果以后要用到其它细节,再倒过头来学吧,毕竟,咳咳,脑子记不住这么多东西。
首先python要引入re库,关于怎样引入之前有过记录。
首先说一下三个常用的匹配规则,
“.” :匹配任意字符,回车除外,加re.S即可匹配回车
“*” :匹配0个或多个表达式
“?”:匹配一个或者多个前面的正则表达式定义片段,非贪婪方式
import re
#要处理的文本
html = '''
<div id="movie-list">
<h2 class = "title">经典电影</h2>
<p class ="introduction">经典电影列表</p>
<ul id ="list" class ="list-group">
<li data-view="2">霸王别姬</li>
<li data-view="4" class="active"><a href="/2.avi director="aaa">阿甘正传</a>
</li>
<li data-view="6"><a href="/3.avi director="bbb">绿皮书</a>
</li>
</ul>
</div>
#search 方法,返回第一个匹配到的结果
result =re.search('<li.*?director="(.*?)">(.*?)</a>',html)
if result:
#注意,这里第一个(.*?)是从1开始
#大家可以猜一下结果,猜中了你也就大概懂了
print(result.group(1),result.group(2))
#findall()方法,返回所有符合结果的匹配
results =re.search('<li.*?director="(.*?)">(.*?)</a>',html)
print(results)
#可以用compile()方法将正则字符串编译成正则表达式对象,以便以后使用
pattern = re.compile('<li.*?director="(.*?)">(.*?)</a>',re.S)
result = re.search(pattern,html)
print(result)
#sub()函数可以替换文本中内容
html =re.sub(<a.*?>|</a>','',html)
print(html)
注意几点
1.关于贪婪和不贪婪问题:
.是贪婪匹配,会匹配更多的字符,比如’ABC 123’
如果是贪婪的话AB(.)(\d+)会匹配到123
而不是贪婪只匹配3
2.re.S
称之为修饰符,常用的还有re.I(对匹配大小不敏感)等,大家用的时候可以百度一下,这里不想细说。
下面一节举一个详细的例子,对以前学的进行一下总结。