四、正则表达式
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
下面这张图展示了使用正则表达式匹配的流程
1、Python支持的正则表达式元字符和语法
语法 | 说明 | 表达式实例 | 完整匹配的字符串 |
字符 | |||
一般字符 | 匹配自己 | abc | abc |
. | 匹配任意字符“\n”除外 DOTALL模式中(re.DOTALL)也能匹配换行符 |
a.b | abc或abc或a1c等 |
[...] | 字符集[abc]表示a或b或c,也可以-表示一个范围如[a-d]表示a或b或c或d | a[bc]c | abc或adc |
[^...] | 非字符集,也就是非[]里的之外的字符 | a[^bc]c | adc或aec等 |
预定义字符集(也可以系在字符集[...]中) | |||
\d | 数字:[0-9] | a\dc | a1c等 |
\D | 非数字:[^0-9]或[^\d] | a\Dc | abc等 |
\s | 空白字符:[<空格>\t\n\f\v] | a\sc | a b等 |
\S | 非空白字符:[^s] | a\Sc | abc等 |
\w | 字母数字(单词字符)[a-zA-Z0-9] | a\wc | abc或a1c等 |
\W | 非字母数字(非单词字符)[^\w] | a\Wc | a.c或a_c等 |
数量词(用在字符或(...)分组之后) | |||
* | 匹配0个或多个的表达式。(注意包括0次) | abc* | ab或abcc |
边界匹配(不消耗待匹配字符中的字符) | |||
^ | 匹配字符串开头,在多行模式中匹配每一行的开头 | ^abc | abc或abcd等 |
$ | 匹配字符串结尾,在多行模式中匹配每一行的结尾 | abc$ | abc或123abc等 |
\A | 仅匹配字符串开头 | \Aabc | abc或abcd等 |
\Z | 仅匹配字符串结尾 | abc\Z | abc或123abc等 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。 | ||
\B | 匹配非单词边界。‘er\B‘ 能匹配 "verb" 中的 ‘er‘,但不能匹配 "never" 中的 ‘er‘。 | ||
逻辑、分组 | |||
时间: 2024-10-13 17:35:31