Python随笔14:Python正则表达式基础(1):概念和语法

标准库re的介绍

引言:正则表达式在处理爬虫和数据分析等任务时使用十分频繁,所以掌握这个标准库是十分必要的。

Python提供了一个正则表达式的标准库re,这个模块的正则表达式匹配操作与 Perl语言类似。

由于re是标准库,所以不需要额外安装。在使用之前须先引入该模块:

import re
正则表达式使用的匹配字符串类型

模式和被搜索的字符串既可以是Unicode字符串(str),也可以是8位字节串 (bytes)。 但是,Unicode字符串与8位字节串不能混用:也就是说,你不能用一个字节串模式去匹配Unicode字符串,反之亦然;类似地,当进行替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。

反斜杠"\"和原始字符串表示法

正则表达式使用反斜杠('\')来表示特殊形式,或者把特殊字符转义成普通字符。 而反斜杠在普通的 Python 字符串里也有相同的作用,所以就产生了冲突。比如说,要匹配一个字面上的反斜杠,正则表达式模式不得不写成 '\\\\',因为正则表达式里匹配一个反斜杠必须是 \\ ,而每个反斜杠在普通的 Python 字符串里都要写成 \\ 。

解决办法是对于正则表达式样式使用Python的原始字符串表示法;在带有 'r' 前缀的字符串字面值中,反斜杠不必做任何特殊处理。 因此 r"\n" 表示包含 '\' 和 'n'两个字符的字符串,而"\n"则表示只包含一个换行符的字符串。样式在Python代码中通常都会使用这种原始字符串表示法来表示。

正则表达式的语法

正则表达式语法由字符和操作符构成,其常用操作符如下:

.——表示任何单个字符。

[]——字符集,对单个字符给出取值范围。如[abc]表示a、b、c中的任意一个。

[^]——非字符集,对单个字符给出排除范围。如[^abc]表示除a、b、c以外的其它字符。

*——前一个字符0次或无限次扩展。如abc*表示ab、abc、abcc、abccc等。

+——前一个字符1次或无限次扩展。abc+表示abc、abc、abccc等。

?——前一个字符0次或1次扩展。如abc?表示ab、abc两种情况。

|——表示左右表达式中的任意一个。如abc|def表示abc、def。

{m}——将前面的一个字符扩展m次。如ab{2}c表示abbc。

{m,n}——扩展前一个字符m至n次(含n)。如ab{1,2}c表示abc、abbc。

注意:<font face="楷体">{m,n}中,m和n之间不能有空格!!!</font>

^——匹配字符串开头。如^abc表示以abc为开头的字符串。

——匹配字符串结尾。如abc表示以abc为结尾的字符串。

()——分组标记,内部只能使用|操作符。如(abc)表示abc,(abc|def)表示abc、def。

\d——数字集合,等价于[0-9]。

\w(注意是小写w)——匹配任意字母、数字及下划线,等价于[a-zA-Z0-9_]。

经典正则表达式实例

^[A-Za-z]+$:由26个大小字母组成的字符串。

^[A-Za-z0-9]+$:由26个字母和数字组成的字符串。

^-?\d+$:整数形式的字符串。注意,带一个负号。

^[1-9]*[1-9][0-9]*$:正整数形式的字符串。

\d{3}-\d{8}:国内电话号码,如020-12345678。

[1-9]\d{5}:中国境内邮政编码,不以0开头的6位数字。

[\u4e00-\u9fa5]:匹配中文字符,此为UTF-8字符集的内容。

To be continued.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容