二、文本提取——正则表达式

我们写一个爬虫, 主要还是要提取网页中的文本信息, 而正则表达式可以很容易的完成这一任务, 这节, 我们来学习一些基本的正则表达式用法, 在以后的章节中, 会在适当的时候插入一些高级用法。

在python中, 使用正则表达式需要引入re包

1. 匹配普通字符.

  任何数字, 字母, 标点符号等, 都可以直接匹配到

 1 import re
 2 
 3 # 匹配数字构成的字串123
 4 string = '012345'
 5 p = re.search('123', string)
 6 print(p.group(0))
 7 
 8 # 匹配字母构成的字串abc
 9 string = '012abc345'
10 p = re.search('abc', string)
11 print(p.group(0))
12 
13 # 匹配标点符号构成的字串,"}
14 string = '01234,"}5'
15 p = re.search(',"}', string)
16 print(p.group(0))

2. 特殊字符.

  正则表达式中定义了一些有着特殊含义的字符, 这些字符只有使用 \ 转义以后才能按照字面意思理解

字符 含义 举例说明
^ 匹配字符串的开头 比如 ^abc 可以匹配 abcd, 但是却不能匹配 0abc
$ 匹配字符串的结尾 比如 abc$ 可以匹配123abc, 却不能匹配 123abcd
* 前一字符匹配零次或者多次 比如 ba* 可以匹配 b 或者 ba, 或者baaaaaaa
+ 前一字符匹配一次或者多次 比如 ba+ 可以匹配 ba 或者 baaaa ,但是不能匹配 b
? 前一字符匹配零次或者一次 比如 ba? 可以匹配 b 或者 ba 但不能匹配 baa
() 表示一个子表达式, 称为元组, 使用元组可以提取出子串 比如 abc(123)def , 当用来我们匹配字符串000abc123defgh时, 我们可以匹配到两个字符串, 分别是 abc123def 和 123
[] 放在[]之间的字符是或的关系,表示匹配到其中一个即可, 需要注意的是^在其中表示匹配非其中的字符的字符, 比如[^345]表示匹配不是3且不是4且不是5的字符

[abc]可以匹配字符a 也可以匹配字符 b, 还可以匹配字符 c

[^abc]可以匹配除a, b, c以外的所有字符

[0-9]可以匹配数字0,1,2,3,4,5,6,7,8,9

[a-z]可以匹配26个小写字母

[A-Z]可以匹配26个大写字母

| 表示或的关系 ab|12可以匹配到 字符串 ef12cdab34中的ab 和 12
{} 可以用于指定前一字符的匹配次数

a{3}可以匹配 字符串abaaacd中的aaa, 但不能匹配aa, a{1,3} 可以匹配 a, aa, aaa,

a{2,}表示至少匹配两个a, 

a{1, }表示至少匹配1个a, 等价于a+

a{0,}表示至少匹配0次a, 等价于a*

. 可以匹配除换行符\n之外的所有字符 比如 a.d可以匹配 a_d, abd, a0d等

这里对*, + , ?需要特别说明:

*和+默认采用贪婪模式, 即会尽可能多的匹配, 比如a* 会优先匹配abcaaadef中的 aaa, 而如果配合?使用, 就可以采用非贪婪模式, 比如a*? 会优先匹配abcaaadef 中的a

3.转义符

字符 含义 举例说明
\d 匹配任意数字 例如\d{3}可以匹配123, 456, 011等由任意三个数字构成的字符串
\D 匹配任意非数字字符 例如\D{2}可以匹配a_, ab, _#, aa等由任意两个非数字字符构成的字符串, 但不能匹配诸如a0, 00, _0的字符串

猜你喜欢

转载自www.cnblogs.com/bzaq/p/10534520.html