Day19 笔记
正则表达式
re模块 -- regex (正则表达式) 有了re模块就可以在python语言中操作正则表达式
什么是正则表达式
一套规则 -- 匹配字符串
正则表达式能做什么
1.检测一个输入的字符串是否合法 —— 应用场景:web开发项目 表单验证
用户输入一个内容时提前做检测
能够提高程序的效率并减轻服务器的压力
2.从一个大文件中找到所有符合规则的内容 —— 应用场景:日志分析 爬虫
能够高效地从一大段文字中快速找到符合规则的内容
正则规则
所有的规则中的字符就可以刚好匹配到字符串中的内容
-
字符组 []
一个中括号只表示一个字符位置,描述的是一个位置上能出现的所有可能性
接受范围,连着写可以描述多个范围
[abc] 可以匹配到a或b或c
[0-9] 可以匹配到数字0-9的任意一个,是根据ASCII码进行范围对比,同理[a-z]、[A-Z]
[a-zA-Z] 大小写都可以匹配到
[0-9a-z] 数字和小写字母都可以匹配到
[0-9][0-9] 匹配到的是两位数字 -
元字符:正则表达式中能够表示匹配内容的符号都是正则中的‘元字符’
[] 字符组
\d 表示匹配一位任意数字(digit)
\w 表示匹配以为数字、字母或下划线(word)
\s 表示所有空白(空格、enter、tab),空格使用 匹配,enter使用\n匹配,tab使用\t匹配
\D 匹配非数字的字符
\W 表示非数字、字母、下划线
\S 匹配非空白符
. 表示匹配除了换行符之外的所有字符
[\d\D]、[\w\W]、[\s\W] 表示匹配所有字符
[^\d]
非字符组,表示除^后面以外的所有字符
^ 匹配一个字符串的开始
$ 匹配一个字符串的结尾
| 或 a|b 匹配a或者b,若匹配a成功,就不继续和b匹配;若|两边给规则有重叠部分,把长的规则放|左边
() 约束|描述的范围 www.(baidu|jd|google).com -
量词
{n} 表示匹配n次
{n} 表示至少匹配n次
{n,m} 表示至少匹配n次,最多匹配m次
? 表示匹配0次或1次
+表示匹配1次或多次
*表示匹配0次或多次 -
匹配0次的用处
匹配一个正整数 \d+
匹配一个整数(正整数或负整数) -?[1-9]\d*
匹配一个小数 \d+.\d+
匹配一个整数或小数 \d+(.\d+)?
匹配手机号码 11位,第1个数字是1,第2个数字只能3-9
1.判断输入手机号是否合法 ^1[3-9]\d{9}$
2.从一个大文件中找到符合规则的内容 1[3-9]\d{9} -
贪婪匹配
在量词范围允许的情况下,尽量多地匹配内容
.*x 表示匹配任意字符,任意多次数,遇到最后一个x才停下来惰性匹配
.*?x 表示匹配任意字符,任意多次数,一旦遇到x就停下来 -
转义符
原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义 如:[().*+?]
-在字符组中表示范围,如果不希望它表示范围,需要转义
练习:
-
18/15位身份证号
18位身份证:1-9 16 0-9或x
15位身份证:1-9 14
答案是: ^[1-9](\d{16}[\dx]|\d{14})$
或者:^[1-9]\d{14}(\d{2}[\dx])?$