文本提取——正则表达式
Posted bzaq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本提取——正则表达式相关的知识,希望对你有一定的参考价值。
我们写一个爬虫, 主要还是要提取网页中的文本信息, 而正则表达式可以很容易的完成这一任务, 这节, 我们来学习一些基本的正则表达式用法, 在以后的章节中, 会在适当的时候插入一些高级用法。
在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* |
. | 可以匹配除换行符 之外的所有字符 | 比如 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的字符串 |