理论理解:
模块 操作某一个确实存在的内容的 python方法
区分下正则 和re模块 时间和time
re模块
# 正则表达式 本身是另外一种语言规范
# 如何使用python操作正则
# 正则表达式 本身是另外一种语言规范
# 如何使用python操作正则
# 正则表达式
# 是什么? 通过一个规则 来从一段字符串中找到符合规则的内容/判断某段字符串是否符合规则
# 有什么用? 注册页/网页上 要求你输入一个信息 判断你输入的信息是否格式正确
# 爬取数据 从网页上把代码以字符串的形式下载回到内存,提取这个大字符串中我想要的内容了
# 是什么? 通过一个规则 来从一段字符串中找到符合规则的内容/判断某段字符串是否符合规则
# 有什么用? 注册页/网页上 要求你输入一个信息 判断你输入的信息是否格式正确
# 爬取数据 从网页上把代码以字符串的形式下载回到内存,提取这个大字符串中我想要的内容了
# 规则 匹配 待匹配的字符串
必须要记住的东西
正则规则
# 1.字符组 约束字符中某一个字符位置上的值是什么 只要是出现在字符组中的内容都算匹配到了
# 2.\'[3-9]\' 从小到大的顺序到底是根据asc码的顺序来的
# 3.匹配数字 [0-9] 匹配字母[A-Za-z] 匹配数字和字母[0-9a-zA-Z]
# 元字符
# . 匹配除了换行符之外的所有字符
# \d \s \w 数字 空白 数字字母下划线
# \D \S \W 非
# ^ $ 开始 结束
# \n \t \b 换行 制表 单词两端
# |
# [] [^]
# 量词 : ? + * {n} {n,} {n,m} 跟在元字符后面
# 贪婪匹配 : 正则表达式本身就是贪婪匹配的
# 惰性匹配 : 尽量少匹配,需要在量词的后面加上一个?
# 最常见的用法 .*?标识 表示匹配任意长度的字符遇到标识就立刻停止
# 元字符 量词 [惰性匹配符号?]
# 看正则表达式的话,怎么区分 ?
# 找元字符 元字符后面如果出现量词 那么这个量词就是约束这个元字符出现的次数
# 如果元字符后面如果不出现量词 表示这个元字符匹配一次
# 如果在量词后面还有? 表示惰性匹配
# r\'\\n\',r\'\n\'
# print(\'\\n\')
# print(\'\\\\n\')
# print(r\'\n\') # 取消字符串中所有转义符的转义作用
# print(r\'\\n\')
# 在正则表达式中 涉及到特殊转义的内容 都放在r\'\'中
# 在工具网页上匹配成功之后 在python中匹配不成功 匹配的字符串中又带有\'\\',那么直接将测试好的内容都放在r\'\'中
正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则。
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、
及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
对比
第一版
while True:
phone_number = input(\'please input your phone number : \')
if len(phone_number) == 11 \
and phone_number.isdigit()\
and (phone_number.startswith(\'13\') \
or phone_number.startswith(\'14\') \
or phone_number.startswith(\'15\') \
or phone_number.startswith(\'18\')):
print(\'是合法的手机号码\')
else:
print(\'不是合法的手机号码\')
判断手机号码是否合法1
第二版
import re
phone_number = input(\'please input your phone number : \')
if re.match(\'^(13|14|15|18)[0-9]{9}$\',phone_number):
print(\'是合法的手机号码\')
else:
print(\'不是合法的手机号码\')
正则表达式
在线测试工具 http://tool.chinaz.com/regex/在线测试工具
字符:
元字符 |
匹配内容 |
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \n | 匹配一个换行符 |
| \t | 匹配一个制表符 |
| \b | 匹配一个单词的结尾 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结尾 |
| \W |
匹配非字母或数字或下划线 |
| \D |
匹配非数字 |
| \S |
匹配非空白符 |
| a|b |
匹配字符a或字符b |
| () |
匹配括号内的表达式,也表示一个组 |
| [...] |
匹配字符组中的字符 |
| [^...] |
匹配除了字符组中字符的所有字符 |
量词:
量词 |
用法说明 |
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
. ^ $
| 正则 | 待匹配字符 | 匹配 结果 |
说明 |
| 海. | 海燕海娇海东 | 海燕海娇海东 | 匹配所有"海."的字符 |
| ^海. | 海燕海娇海东 | 海燕 | 只从开头匹配"海." |
| 海.$ | 海燕海娇海东 | 海东 | 只匹配结尾的"海.$" |
* + ? { }
| 正则 | 待匹配字符 | 匹配 结果 |
说明 |
| 李.? | 李杰和李莲英和李二棍子 |
李杰 |
?表示重复零次或一次,即只匹配"李"后面一个任意字符 |
| 李.* | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
*表示重复零次或多次,即匹配"李"后面0或多个任意字符 |
| 李.+ | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符 |
| 李.{1,2} | 李杰和李莲英和李二棍子 |
李杰和 |
{1,2}匹配1到2次任意字符
|
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
| 正则 | 待匹配字符 | 匹配 结果 |
说明 |
| 李.*? | 李杰和李莲英和李二棍子 | 李 李 李 |
惰性匹配 |
字符集[][^]
| 正则 | 待匹配字符 | 匹配 结果 |
说明 |
| 李[杰莲英二棍子]* | 李杰和李莲英和李二棍子 |
李杰 |
表示匹配"李"字后面[杰莲英二棍子]的字符任意次 |
| 李[^和]* | 李杰和李莲英和李二棍子 |
李杰 |
表示匹配一个不是"和"的字符任意次 |
| [\d] | 456bdha3 |
4 |
表示匹配任意一个数字,匹配到4个结果 |
| [\d]+ | 456bdha3 |
456 |
表示匹配任意个数字,匹配到2个结果 |
分组 ()与 或 |[^]
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部