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}$//手机号

0 0
原创粉丝点击