Python正则表达式
来源:互联网 发布:redis批量查询数据 编辑:程序博客网 时间:2024/06/16 17:22
原因
今天学习了一下正则表达式,之前一直有用正则去校验一些手机号,身份证号啥的,但是都是网上找的,没有好好学习正则。想着爬虫离不开正则啊,不能老上网找,找完还得验证,费时费力,于是乎,自己学学吧
规则
- re.search(pattern,string,flag) 全程匹配
- re.sub(pattern,repl,string,count) 全程匹配
- re.match(pattern,string,flag) 从头开始匹配
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
^:匹配字符串的开头。妈的找这个符号找了好一会
$:匹配字符串的末尾,要求字符串末尾匹配最后一项。又被坑了,只有英文输入法的时候才是$
. :匹配出换行符的任意字符,标志位是re.DOTALL时,可匹配换行符
[apk]:表示可以匹配apk中的任意一位
[^apk]:表示匹配处理apk的所有的字符
():表示一个子表达式的开始和结束
*:匹配之前子表达式0次或者多次
?:匹配前面的子表达式零次或一次
+:匹配之前个子表达式1次或者多次
\w:匹配字母,数字,下划线
\W:匹配非字母,非数字,非下划线
\s:匹配任意空白字符
\S:匹配任意非空字符
\d:匹配任意数字
{n}:匹配n次
{n,}:至少匹配n次
{n,m}:匹配最少n次,最多m次
……太多了,是我低估了正则,要记不住了,目前就先写这几个重要的吧,通过分析几个例子来理解一下吧,帮助记忆:
先说一下匹配是什么个意思:
匹配就是字符串的全部或者部分字符(必须是连续的),跟表达式规则是符合的就是匹配了
例子分析
正整数 :^[1-9]\d*$
分析:^表示字符串的开头,[1-9]表示开头只能是1-9的数字,\d表示数字,\d*表示匹配数字0次或者多次,\$表示要求结尾也是\d数字。最终的结果就是第一位是1-9的数字,中间和最后 都是数字。
负整数:^-[1-9]\d*$ 这个就不解释了,多一个负号。
整数 :^-?[1-9]\d*$|0
分析:^-?表示开头匹配-号0次或者1次,|表示或者匹配0,其他的跟整数一样
正浮点数:^[1-9]\d*.\d* |0.\d*[1-9]\d*$
分析:开头匹配1-9的数字,接下来匹配数字0次或者多次,接着再匹配小数点,再接着小数点后面是多个数字,结尾是数字;或者0.开头,接着是数字0个或者多个,因为不能等于0,必须要一个1-9的数字,接着是数字0个或者多个,结尾也是数字
大小写字母字符串:^[A-Za-z]+$
分析:开头匹配a-z或者A-Z,匹配a-z或者A-Z1次或者多次,结尾也是a-z或者A-Z。
身份证号码:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
分析:开头匹配6次数字,接着匹配4次数字,接着匹配两次数字,接着匹配3次数字,接着以数字或者X结尾。这是网上的,根据学习自己写一个:^(\d{17})([0-9]|X)\$(\$前面如果有\的话,\是为了转义的,实际表达式不需要)
至此,我相信碰到了一个正则表达式,最少能看的懂,能分析对错了。这尼玛语法,坑爹的不行啊,不费点功夫还真是难以理解。也是日了狗了,这几个小时弄完这一点,希望以后不要忘记。
各种表达式
最后,贴一点网上的各种表达式吧。没验证过,用着要小心,用之前先看看对不对:
匹配特定数字: (统一说明,$前面如果有\的话,\是为了转义的,实际表达式不需要)
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d* |0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d* |0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*.\d* |0.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*.\d* |0.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*.\d* |0.\d*[1-9]\d* |0?.0+ |0)$ //匹配浮点数
^[1-9]\d*.\d* |0.\d*[1-9]\d* |0?.0+ |0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*.\d* |0.\d*[1-9]\d*)) |0?.0+ |0$ //匹配非正浮点数(负浮点数 + 0)
\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*//邮箱
^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\d{8}$//手机号
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- 带你吃透RTMP
- Modsecurity设置识别异常资源使用
- Set集合方法之一 续 再谈HashSet
- 关于matlab几种标准化的代码
- C语言-快速排序
- Python正则表达式
- Java动态打Jar包工具类
- android studio制作.9图片,并且不改变原图大小
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- linux内核file_operations的赋值流程跟踪
- navicat for postgresql使用须知
- java-数据结构
- java——反射
- gensim 基本使用