Ø 正则表达式的概念
在编写网页文件的程序时,经常会对含有复杂规则的字符串进行查询,而正则表达式就是用一些具有特殊含义的符号组合在一起来描述字符或字符串的规则。比如想要查询一个网页中所有的联系人电话号码,此时可以编写一个正则表达式来表示所有的电话号码,然后在网页中提取出所有满足该规则的字符串即可。在Python中,通过内嵌的re模块来实现正则表达式的功能。
Ø 正则表达式详解
当想要查找网页中所有的“python”字符串时,可以使用正则表达式来匹配,但设置的规则不同,匹配出来的结果也不同。例如使用正则表达式“\w\dpython\w”匹配出来的可能是23python8或者u6python_等,而使用“\bpython\b”匹配出来的则是python。由此可见,只有掌握一些正则表达式的基础知识,才能匹配出需要的结果。本节主要从原子、元字符、模式修正符等方面介绍正则表达式的知识。
1. 原子
“原子”一词很容易联想到物理学中物质由原子组成的概念,类似的,原子是正则表达式中最基本的组成单位,但正则表达式中的原子与物理学中的原子不是一个概念。正则表达式中常见的原子有以下几类:
(1)普通字符。
(2)非打印字符。
(3)通用字符。
(4)原子表。
接下来详细介绍每个分类。
1)普通字符作为原子
普通的字符包括数字、大小写字母、下画线等,都可以作为原子使用。
2)非打印字符作为原子
所谓的非打印字符是一些在字符串中的格式控制符号,例如空格、回车及制表符。
3)通用字符作为原子
通用字符即一个原子可以匹配一类字符,在实际项目中最常用的就是这类原子。例如“\w\dcodingke\w”,其中\w表示一个字母、数字或者下划线,字符前一位\d是一个任意的十进制数[0-9],如“666codingke666”、“z6codingke_”都可以匹配成功。
常见的通用字符除了“\w”、“\d”外还包含它们的大写表示“\W”与“\D”,大写通用字符表示与小写相反的含义,例如“\w”表示匹配任意一个字母、数字或下画线,“\W”则表示除字母、数字或下画线以外的任意一个字符。
4)原子表
Python中原子表使用[]表示,它可以定义一组地位平等的原子,匹配时会取该原子表中的任意一个原子进行匹配,例如[xyz]、[^a-zA-Z]原子表中原子地位平等,[^]代表除了原子表内的原子均可以匹配。
2. 元字符
所谓元字符就是正则表达式中具有特殊意义的字符,元字符分为任意匹配元字符、边界限制元字符、限定符、模式选择符等。
常用的元字符如表所示。
| 符号 | 含义 |
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾 |
| . | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,可以匹配包括换行符的任意字符 |
| […] | 用来表示一组字符,单独列出:[amk]匹配’a’,’m’或’k’ |
| [^…] | 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
| * | 匹配0个或多个表达式 |
| + | 匹配1个或多个表达式 |
| ? | 匹配0个或1个 |
| {n} | 精确匹配n个前面表达式 |
| {n,m} | 匹配n到m次由前面的正则表达式定义的片段,贪婪方式 |
| a|b | 匹配a或b |
| ( ) | 匹配括号内的表达式,也表示一个组 |
1)任意匹配元字符
任意匹配元字符“.”可以匹配一个除换行符以外的任意字符。例如,正则表达式“codingke......”表示匹配codingke后面六位除换行符以外格式的字符。
2)边界限制元字符
边界限制元字符使用“^”匹配字符串的开头,使用“$”匹配字符串的结束。
3)限定符
限定符也是常用元字符的一种,常见的限定符包括*、?、+、{n}、{n,}、{n,m}。
4)模式选择符
使用模式选择符可以设置多个模式,匹配时可以从中选择任意一个模式匹配。例如正则表达式“python|java”中,字符串“python”和“java”均满足匹配条件。