概念与注意点
1)模式字符串使用特殊的语法来表示一个正则表达式
2)r’…’ 用在pattern之前,表示单引号中的字符串为原生字符,不会进行任何转义
由于正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示。模式元素(如 r’\t’,等价于 \t )匹配相应的特殊字符
3)常用模式
① 用于匹配位置
^ 匹配字符串的开头
$ 匹配字符串的末尾
示例
这里需要注意,上一节讲到的re.match()是从头开始匹配的,所以要使用这个方法匹配最后一个字符是以xx结束的,前面需要加上“.*”,以确保前面是有字符的,否则会匹配失败
4)用于匹配内容
模式 | 功能 |
---|---|
. | 匹配除 “\n” 之外的任何 单个 字符,要匹配包括 ‘\n’ 在内的任何字符,请使用类似 ‘[\s\S]’ 的模式 |
[…] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符 |
\d | 匹配一个数字字符。等价于 [0-9] |
\D | 匹配一个非数字字符。等价于 [^0-9] |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’ |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’ |
示例
例子 | 作用 |
---|---|
[Pp]ython | 匹配 “Python” 或 “python” |
rub[ye] | 匹配 “ruby” 或 “rube” |
[aeiou] | 匹配中括号内的任意一个字母 |
[0-9] | 匹配任何数字。类似于 [0123456789] |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
[^aeiou] | 除了aeiou字母以外的所有字符 |
[^0-9] | 匹配除了数字外的字符 |
5) 用于匹配次数
模式 | 功能 |
---|---|
* | 匹配0个或多个的表达式 |
+ | 匹配1个或多个的表达式 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
{n} | 匹配n个前面表达式 |
{n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
示例
注意:关于 .* 和 .+ 及 .? 之间的区别可以通过上面的示例进行分辨
6)用于分组
(re) 匹配括号内的表达式,也表示一个组
示例(在上一节中也有提到)
7)贪婪匹配问题
贪婪匹配:尝试匹配尽可能多的字符,默认匹配都是贪婪匹配
非贪婪匹配:尝试匹配尽可能少的字符,用 ?
示例(还是使用前面的字符串)
8)或
a| b 匹配a或b ,在前面内容6分组的时候,写匹配模式的时候就有用到 re.M|re.I
自此正则表达式模式就介绍完毕