正则表达
1.正则表达应用场景:
1.判断某一个字符串是否符合规则: 手机号码,邮箱,身份证的验证
爬虫,在一大段的文字或字符串中提取想要的信息 : 爬虫,日志分析
2.什么是正则表达:
是一种规则,来约束字符串的规则,只和字符串大交道
3.字符组,[0-9] [a-z] [A-Z] [0-9A-Za-z]
字符组 : 是原字符中的一个
在字符组中所有的字符都可以匹配任意一个字符位置上能出现的内容
ascii编码最小的值指向一个大的值,数字也是
4:元字符
\w word, \d digit ,\s space , \n next ,\t tab , \W ,\D,\S与小写相反
元字符分类记忆:
\w,\d,\s,\W,\D,\S \n,\t 匹配特殊的字符
^ $ \b 匹配边界
[] [] 字符组相关
/ 或
() 分组
. 匹配换行符以外的任意字符
5: 量词:
? + * {n} {n,} {n,m}
\d+ 整数
\d+\.\d+ 小数
\d+/\d+\.\d+ 整数或小数
\d+(\.\d+)?
6:贪婪匹配: 正则会尽量多的帮我们匹配
默认贪婪 回溯算法
惰性匹配: 正则会尽量少为我们匹配
.*?x表示匹配任意字符遇到x就立刻停止
身份证15位或18位校验:
如果是15位,首位不能为0,其余14个数字
如果18位,首位不为0,末尾为数字或x
[1-9]\d{14}
[1-9]\d{16}[\dx]|[1-9]\d{14}|[1-9]\d{17}
7:匹配网址:
www\.(baidu)\.com
8:转义符: pattern = r'\\n'
s = r'\n'
9: re 模块
findall : 参数,正则表达,待匹配的字符串 ;返回值是一个列表,所有匹配到的字符串
import re obj = re.findall('\d+','we3fg1fds45wefrg454fv') print(obj)
search 返回一个SRE_Match对象
通过group,且只包含第一个匹配到的值
import re obj = re.search('\d+','we3fg1fds45wefrg454fv') print(obj)
if obj: print(obj.group())
findall 会优先显示分组中的内容:
import re obj = re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") print(obj) obj.remove('') print(obj)