Python之第三十二天的努力--正则表达式
正则表达式
-
什么是正则表达式
一套规则 --- 匹配字符串
-
能做什么
- 1.检测一个输入的字符串是否合法 ----> web开发项目 表单验证
- 用户输入一个内容时,我们要提前做检测,能够提高程序的效率并且减轻服务器的压力。
- 2.从一个大文件中找到所有符合规则的内容 ----> 日志分析\爬虫
- 能够高效的从一大段文字中快速找到符合规则的内容
- 1.检测一个输入的字符串是否合法 ----> web开发项目 表单验证
-
正则规则
- 所有的规则中的字符就可以刚好匹配到字符串中的内容
-
字符组
-
描述的是一个位置上能出现的所有可能性
-
接受范围,可以描述多个范围,连着写就可以了
-
[abc] 一个中括号只表示一个字符位置 --- 匹配a或者b或者c
[0-9] 根据ASCII进行范围的比对
[a-z] ---> 所有小写字母
[A-Z] ---> 所有大写字母
[a-zA-Z] ---> 大小写字母
[0-9a-zA-Z] ---> 所有数字和字母下划线
-
[0-9] ---> \d 表示匹配一位任意数字 digit
-
[0-9a-zA-Z] ---> \w 表示匹配所有数字字母下划线 word
-
空白(空格\tab\enter) ---> ( |\t|\n)
-
空白(空格\tab\enter) ---> \s
-
-
元字符 ---> 匹配内容的规则
-
[] ---> 字符组
-
\d ---> 表示匹配一位任意数字
-
\w ---> 表示匹配所有数字字母下划线
-
\t ---> 表示匹配tab
-
\n ---> 表示匹配enter
-
\s ---> 表示匹配所有空白符
-
\W ---> 表示匹配非数字字母下划线
-
\D ---> 表示匹配非数字
-
\S ---> 表示匹配非空白符
-
[\d\D] [\w\W] [\s\S] ---> 表示匹配所有
-
. ----> 表示匹配除了换行符之外的所有 (但是可以设置)
-
[^] ---> 表示匹配所有的非...
-
[^\d] ---> 表示匹配所有的非数字
-
^ ---> 表示匹配一个字符串的开始
-
$ ---> 表示匹配一个字符串的结尾
-
a表达式|b表达式 ---> 表示匹配a或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配
所以,如果两个规则中有重叠部分,总把长的放在前边
-
() ---> 表示 约束 | 描述的内容的范围问题
-
......\b ----> 表示以......结尾的单词
-
练习
- 匹配 www.baidu.com和www.hhh.com
- 当匹配 . 时 要加 \ ----> \ .
![image-20200710211434976]()
-
-
量词
-
{n} 表示匹配n次
![image-20200712151713160]()
-
{n,} 表示匹配至少n次
![image-20200712151859660]()
-
{n,m} 表示至少匹配n次,至多匹配m次
![image-20200712151937710]()
-
? 表示匹配0次或1次
![image-20200712152032050]()
-
+ 表示匹配1次或多次
![image-20200712152113651]()
-
* 表示匹配0次或多次
![image-20200712152206318]()
-
匹配0次
- 匹配整数 \d+
- 匹配小数 \d+\.\d+
- 匹配整数或小数 \d+\.?\d* \d+(\.\d+)?
-
匹配手机号码
-
1开头 第二位:3~9 共11位 1[3-9]\d
-
判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果
^1[3-9]\d{9}$
-
从一个大文件中找到所有符合规则的内容 1[3-9]\d
-
-
-
贪婪匹配
-
在量词范围允许的情况下,尽量多的匹配内容。
回溯算法
![image-20200712155221133]()
- .*x 表示匹配任意字符 任意多次 遇到最后一个x才停下来
-
-
非贪婪(惰性)匹配:量词后加 ?
- 元字符 量词 ?
![image-20200712155445152]()
- .*?x 表示匹配任意字符 任意多次 但是一旦遇到x就停下来
-
转义符
- 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
- \. -----> .
- \\n ----> \n
- \( -----> (
- 有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义
- [().*+?] ----> 所有的内容在字符组中会取消他的特殊意义
- [a\-c] --->在字符组中表示范围,如果不希望它表示范围,需要转义,或者放在字符组的最前面或最后面
- 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
-
练习
-
18或15位的身份证号
15:第一位:1~9
18:第一位:1~9 最后一位:0~9或x
[1-9]\d{16}[\dx]|[1-9]\d{14}
^([1-9]\d{16}[\dx]|[1-9]\d{14})$
[1]\d{14}(\d{2}[\dx])?$
-
1-9 ↩︎










浙公网安备 33010602011771号