1 简介/动机
正则表达式 :为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。
Python 通过标准的re模块来支持正则表达式。
注意:此处我们提到的搜索和匹配意义不一样
你的第一个正则表达式
正则表达式 | 匹配的字符串 |
---|---|
foo | foo |
Python | Python |
abc123 | abc123 |
666 | 666 |
2 符号和字符
元字符 赋予正则表达式强大的功能和灵活性。
举例
表示法 | 描述 | 正则表达式示例 |
---|---|---|
literal | 匹配文本字符串的字面值literal | fool |
re1/re2 | 匹配正则表达式re1或者re2 | fool/bar |
. | 匹配任何字符(除\n) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串终止部分 | /bin/*sh$ |
* | 匹配0次或多次前面出现的表达式 | [A-Za-z0-9]* |
+ | 匹配1次或者多次前面出现的正则表达式 | [a-z]+.com |
? | 匹配0次或者1次前面出现的正则表达式 | gool? |
{N} | 匹配N次前面出现的表达式 | [0-9]{3} |
{M,N} | 匹配M~N次前面出现的正则表达式 | [0-9]{5,9} |
[...] | 匹配来自字符集任意单一字符 | [aeiou] |
[..x-y..] | 匹配x-y范围中的任意单一字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集出现的任意一个字符 | [aeiou][A-Za-z] |
(*|+|?|{})? | 用于匹配上面频繁出现符号的非贪婪版本 | .*?[a-z] |
(...) | 匹配封闭式的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo|u)bar |
\d | 匹配任何十进制数字,\D与之相反 | data\d+.txt |
\w | 匹配任何字母数字字符,\W与之相反 | [A-Za-z |
\s | 匹配任何空格字符,与[\n\t\r\v\f]相同(\S与之相反) | of\sthe |
\b | 匹配任何单词边界(\B与之相反) | \bThe\b |
\N | 匹配已保存的子组 N (参见上面的(...) | price:\16 |
\c | 逐字匹配任何特殊字符c | \.,\* |
A(\Z) | 匹配字符串的起始(结束) | \ADear |
2.1 使用择一匹配符号匹配多个正则表达式模式
择一匹配的管道符号(|)表示从”从多个模式选择其一的操作
正则表达式模式 | 匹配的字符串 |
---|---|
at | home | at、home |
r2d2 | \c3po | r2d2、c3po |
bat | bet | bit | bat、bet、bit |
择一匹配符号(|) 也称作并(union)或逻辑或(logical OR)
2.2 匹配任意单个字符
点号(.)匹配除了换行符(\n)以外的任意字符。
注意:匹配句点或者句号,必须使用反斜杠转义句点符号的功能(\.)
2.3 从字符串起始或者结尾或者单词边界匹配
匹配字符串的开始位置:^、\A
匹配字符串的末尾位置:$、\Z
注意:匹配一个字符串(^Subject:hi$)
匹配一个单词的边界:\b, \B
注意:\bthe表示任何以the为起始的字符串
\Bthe表示任何包含但不以the为起始的字符串
2.4 创建字符集
[ ] 用来创建特定字符集,它的功能类似 |,例如[ab] = a | b
注意:[ab][c] 匹配 ac 或 bc, 不同于 ab | c
2.5 限定范围和否定
除了单字符以外,字符集还支持匹配指定的字符范围,涉及连字符(-)和脱字符(^)。
注意:[a-z]表示a-z任意一个;[^aeiou]表示一个非元音字符
2.6 使用闭包操作符实现存在性和频数匹配
闭包操作符:*、+
注意:贪婪匹配时默认匹配尽可能多字符,闭包操作符是贪婪的,?是非贪婪的
2.7 表示字符集的特殊字符
特殊字符也可以表示字符集,例如 \d 表示 [0-9],\w 表示 [A-Za-z0-9]等。
注意:这些特殊字符的大写表示意义恰恰相反,表不匹配
2.8 使用圆括号指定分组
圆括号的两个功能:
- 对正则表达式进行分组
- 匹配子组
注意:匹配子组是为了看到匹配表达模式的字符串各部分内容,例如,(\w+)-(\d+)可以分别访问每一个子组
2.9 扩展表示法
扩展表示法的模式:(?p
注意:扩展表示法往往表条件,例如,(?=.com) 表示如果后面跟着 ".com" 才做匹配操作