Python-正则表达式
正则表达式
概念
是一套规则,用来匹配字符串的规则
作用
-
检测一个输入的字符串是否合法 ---web开发项目,表单验证
用户输入一个内容的时候,我们要提前做检测
能够提高程序的效率并且减轻服务器的压力
-
从一个大文件中找到所有符合规则的内容---日志分析/爬虫
能够高效的从一大段文字中快速找到符合规则的内容
正则规则
所有的规则中的字符就可以刚好匹配到字符串中的内容
一、字符组 [],描述的是一个位置上出现的所有可能性
接受范围,可以描述多个范围,连着写就可以了
[abc] 一个中括号只表示一个字符位置,匹配a或者b或者c
[0-9] 根据ascii进行范围的比对
[a-Z]
[A-Z]
[a-zA-Z]
[0-9a-z]
[0-9a-zA-Z]
在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的元字符
[0-9] ---> \d 表示匹配一位任意数字 digit
[0-9a-zA-Z] ---> \w 表示匹配任何数字任何大小字母和下划线 word
空格 --->
tab ---> \t
enter回车 ---> \n
空格,tab,enter回车 ---> \s 表示所有空白,包括空格 tab回车
\W 非数字字母下划线
\D 非数字
\S 非空白
[\d]
[\d\D] [\w\W] [\s\S] 表示匹配所有
. 表示匹配除换行符之外的所有
[^\d] 匹配所有非数字
[^1] 匹配所有的非数字
^ 匹配一个字符串的开始
$ 匹配一个字符串的结尾
/ 或 a表达式|b表达式 匹配a或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配,所以,如果两个规则有重叠部分,总是把长的放在前面
() 约束/描述内容的范围问题 如: www\.(qq|baidu|jd)\.com 匹配www.baidu.com或www.qq.com或www.jd.com
常用元字符: 表示能匹配哪些内容,一个元字符总是表示一个字符位置上的内容
| 代码 | 说明 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
| \t | 制表 |
| \n | 换行 |
| \D | 非数字 |
| \W | 非数字字母下划线 |
| \S | 非空白 |
| [] [^] | 匹配以什么开头 |
| | | 匹配或,|前面的内容匹配成功,|后面的内容不再进行匹配 |
| () | 约束/描述内容的范围问题 |
二、常用限定符(量词,匹配的次数)
| 代码/语法 | 说明 |
|---|---|
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| 重复n次 | |
| 重复n次或更多次 | |
| 重复n到m次 |
匹配0次
\d+ 匹配整数
\d+. \d+ 匹配小数
\d+(. \d+)? 匹配整数或者小数
\d+(\ . \d+)?分组的作用
题目:
问题: 匹配11位的手机号码 答案: ^1[3-9]\d{9}$
三、贪婪和非贪婪匹配规则
- 贪婪匹配规则
在量词范围允许的情况下,尽量多的匹配内容
.*x 表示匹配任意字符 任意多的次数 遇到最后一个x才停下来
- 非贪婪(惰性)匹配
.*?x 表示匹配任意字符 任意多的次数 但是一旦遇到x就停下来
四、转义符
- 原本有特殊意义的字符,到了表达它本身意义的时候,需要转义
- 有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义
[().*+?] 所有的内容在字符组中会取消它的特殊意义
[a\ -c] 在字符组中表示范围,如果不希望它表示范围,需要转义,或者放在字符组的最前面\最后面
常用反义词
| 代码/语法 | 说明 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非数字的字符 |
| \B | 匹配不是单词开头或结束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |

浙公网安备 33010602011771号