正则表达式(一)
一、定义
- 正则表达式使用
预定义的特定模式
去匹配一类具有共同特征的字符串,主要用于字符串处理,可以快速、准确的完成复杂的查找、替换
等处理要求,在文本编辑与处理
、网页爬虫
之类的场合中有重要应用。 - Python中,
re模块
提供了正则表达式操作所需要的功能
二、语法
正则表达式由元字符及其不同的组合来构成,通过巧妙地构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务,下图为表达式常用元字符表:
元字符 | 功能说明 |
---|---|
. | 匹配除换行符以外的任意单个字符 |
* | 匹配位于*之前的字符或子模式的0次或多次出现 |
+ | 匹配位于+之前的字符或子模式的1次或多次出现 |
- | 在[]之内用来表示范围 |
^ | 匹配行首,匹配^以后的字符开头的字符串 |
$ | 匹配行尾,匹配以$之前的字符结束的字符串 |
? | 匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。 |
\ | 表示位于\之后的为转义字符 |
\num | 此处的num是一个正整数,表示子模式编号。 |
\f | 换页符匹配 |
\n | 换行符匹配 |
\r | 匹配一个回车符 |
\b | 匹配单词头或单词尾 |
\d | 匹配任何数字,相当于[0-9] |
\s | 匹配任何空白字符,包括空格、制表符、换页符,与 [ \f\n\r\t\v] 等效 |
\w | 匹配任何字母、数字以及下划线,相当于[a-zA-Z0-9_] |
() | 将位于()内的内容作为一个整体来对待 |
{m,n} | {}前的字符或子模式重复至少m次,至多n次 |
[] } | 表示范围,匹配位于[]中的任意一个字符 |
[^xyz] | 反向字符集,匹配除x、y、z之外的任何字符 |
[a-z] | 字符范围,匹配指定范围内的任何字符 |
[^a-z] | 反向范围字符,匹配除小写英文字母之外的任何字符 |
三、常用的正则表达式
- 最简单的正则表达式是
普通字符串
,可以匹配自身 - '[^abc]‘可以一个匹配任意除’a’、‘b’、'c’之外的字符
- (pattern)*:允许模式重复0次或多次
(pattern)+:允许模式重复1次或多次
(pattern){m,n}:允许模式重复m~n次 - ‘(a|b)*c’:匹配多个(包含0个)a或b,后面紧跟一个字母c
- ‘ab{1,}’:等价于’ab+’,匹配以字母a开头后面带1个至多个字母b的字符串
- r’(\w)(?!.*\1)’:查找字符串中每个字符的最后一次出现
- r’(\w)(?=.*\1)’:查找字符串中所有重复出现的字符
- ‘^(-)?\d+(.\d{1,2})?$’:检查给定字符串是否为最多带有2位小数的正数或负数
- ‘\d{4}-\d{1,2}-\d{1,2}’:匹配指定格式的日期,例如2016-1-31
- r"/d+(?=[a-z]+)":匹配连续的数字并且最后一个数字跟着小写字母
- r’\b((?!abc)\w)+\b’:匹配不包含连续字符串abc的单词