python爬虫入门教程爬虫入门教程–正则表达式完全指南(五)正则表达式完全指南(五)
前言前言
正则表达式处理文本有如疾风扫秋叶,绝大部分编程语言都内置支持正则表达式,它应用在诸如表单验证、文本提取、替换等
场景。爬虫系统更是离不开正则表达式,用好正则表达式往往能收到事半功倍的效果。
介绍正则表达式前,先来看一个问题,下面这段文本来自豆瓣的某个网页链接,我对内容进行了缩减。问:如何提取文本中所
有邮箱地址呢?
html = """
<style>
.qrcode-app{
display: block;
background: url(/pics/qrcode_app4@2x.png) no-repeat;
}
</style>
<div class="reply-doc content">
<p class="">34613453@qq.com,谢谢了</p>
<p class="">30604259@qq.com麻烦楼主</p>
</div>
<p class="">490010464@163.com<br/>谢谢</p>
"""
如果你还没接触过正则表达式,我想对此会是一筹莫展,不用正则,似乎想不到一种更好的方式来处理,不过,我们暂且放下
这个问题,待学习完正则表达式之后再来考虑如何解决。
字符串的表现形式字符串的表现形式
Python 字符串有几种表现形式,以u开头的字符串称为Unicode字符串,它不在本文讨论范围内,此外,你应该还看到过这两
种写法:
>>> foo = "hello"
>>> bar = r"hello"
前者是常规字符串,后者 r 开头的是原始字符串,两者有什么区别?因为在上面的例子中,它们都是由普通文本字符组成的
串,在这里没什么区别,下面可以证明
>>> foo is bar
True
>>> foo == bar
True
但是,如果字符串中包括有特殊字符,会是什么情况呢?再来看一个例子:
>>> foo = "\n"
>>> bar = r""
>>> foo, len(foo)
('', 1)
>>> bar, len(bar)
('\n', 2)
>>> foo == bar
False
>>>
“” 是一个转义字符,它在 ASCII 中表示换行符。而 r”” 是一个原始字符串,原始字符串不对特殊字符进行转义,它就是你
看到的字面意思,由 “\” 和 “n” 两个字符组成的字符串。
定义原始字符串可以用小写r或者大写R开头,比如 r”” 或者 R”” 都是允许的。在 Python 中,正则表达式一般用原始字符串
的形式来定义,为什么呢?
举例来说,对于字符 “” 来说,它在 ASCII 中是有特殊意义的,表示退格键,而在正则表达式中,它是一个特殊的元字符,
用于匹配一个单词的边界,为了能让正则编译器正确地表达它的意义就需要用原始字符串,当然也可以使用反斜杠 “\” 对常规
定义的字符串进行转义
>>> foo = "\"