码迷,mamicode.com
首页 > 编程语言 > 详细

python全栈学习--day31(正则)

时间:2018-04-28 19:41:02      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:连续   com   表示   bsp   代码   nbsp   特殊字符   操作   很多   




try: ‘‘‘可能会出现异常的代码‘‘‘ except ValueError: ‘‘‘‘打印一些提示或者处理的内容‘‘‘ except NameError: ‘‘‘...‘‘‘ except Exception: ‘‘‘万能异常不能乱用‘‘‘

 

try:
    ‘‘‘可能会出现异常的代码‘‘‘
except ValueError:
    ‘‘‘‘打印一些提示或者处理的内容‘‘‘
except NameError:
    ‘‘‘...‘‘‘
except Exception:
    ‘‘‘万能异常不能乱用‘‘‘
else:
    ‘‘‘以上所有的except都不执行‘‘‘

  

try:
    ‘‘‘可能会出现异常的代码‘‘‘
except ValueError:
    ‘‘‘打印一些提示或者处理的内容‘‘‘
else:
    ‘‘‘try中的代码正常执行了‘‘‘
finally:
    ‘‘‘无论错误是否发生,都会执行这段代码,用来做一些首尾工作‘‘‘

  

number = input(‘please input your phone number:‘)
if number.isdigit() and number.startswith(‘13‘)    or number.startswith(‘14‘)    or number.startswith(‘15‘)    or number.startswith(‘16‘)    or number.startswith(‘17‘)    or number.startswith(‘18‘)    or number.startswith(‘19‘):
    print(‘通过检查‘)
else:
    print(‘格式错误‘)

上面的代码太冗长了,使用正则
number = input(‘please input your phone number:‘)
ret = re.match(‘(13|14|15|16|17|18|19)[0-9]{9}‘,number)
if ret:print(‘通过初检查‘)

实例一:

匹配出手机号码,就可以使用正则了。

with open(‘a‘,encoding=‘utf-8‘)as f1:
    li = []
    for i in f1:
        i = i.strip()
        ret = re.findall(‘1[3-9]\d{9}‘,i)
        li.extend(ret)      #extend 合并
print(li)
正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则。
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

  正则表达式

在线测试工具  http://tool.chinaz.com/regex/

这个是最好的正则表达式工具
正则可以随时匹配

技术分享图片

缺点:
如果只会用这个工具,而不会自己写的话。就不行了。主要是自己写,不要太依赖它。
字符组  字符串用[]表示
它只能匹配一个字符串
技术分享图片

 

 技术分享图片

 

那么在之后我们更多要考虑的是在同一个位置上可以出现的字符的范围。
字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。
技术分享图片
[9-0] 是不可以的,为啥?
它比较的是ascii码
 
[5-9] 这种是可以的
[5.5-9] 这种是不可以的
不允许输出小数点
 
匹配3位数字
技术分享图片

技术分享图片

匹配大写

技术分享图片

 

 大小写匹配

技术分享图片

[A-z] 这样写是不对的。ascii码的大小写不是连续的
它不能匹配特殊字符
 
 
 [0-9a-fA-F] 表示匹配十六进制
 总结:
技术分享图片

技术分享图片

技术分享图片

.是万能的,除了换行符以外

匹配空白

技术分享图片

重点

^
匹配字符串的开始
$
匹配字符串的结尾

 

技术分享图片

以海开头

技术分享图片

正则表达式,不能写在后面

技术分享图片

它只能出现在开始位置不能在中间或者后面位置

技术分享图片

技术分享图片

技术分享图片

技术分享图片

这种情况,是唯一ke可以放到任意位置的

技术分享图片

技术分享图片

技术分享图片

技术分享图片

表示匹配11位以上,不能低于11位

技术分享图片

匹配15位,往多的匹配

技术分享图片

技术分享图片

*表示0次或者多次。
这里匹配了0次,虽然没匹配上。
 技术分享图片

匹配1次或者多次

技术分享图片

?匹配一次或者0次
匹配不上,就是0次
技术分享图片

 

 重点:

量词只能约束一个字符串

这里的约束[A-Z]

技术分享图片

同时约束[0-9]和[A-Z]

技术分享图片

没有匹配上,就是匹配0次
匹配0次
技术分享图片

技术分享图片

tool.chinaz.com/regex/
这个工具,显示的结果,可能跟真实的有区别
?表示0次或多次
技术分享图片
默认的正则是贪婪匹配
如果能匹配1次,绝不匹配0次
.* 表示匹配所有
 
 技术分享图片

技术分享图片

技术分享图片

非贪婪匹配,加一个?,就是非贪婪
在规则内,越少越好

 技术分享图片

最多2次

技术分享图片

技术分享图片

 带红线,不是重要的

 技术分享图片

元字符,应该和量词使用

分组 ()与 或 |[^]
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示:
技术分享图片

 

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

需求对二个约束

技术分享图片

写这样写不好

技术分享图片

 

 技术分享图片

至少匹配15次

技术分享图片

这样写,就比较专业

技术分享图片

技术分享图片

转义符 \
现在要匹配\n,斜杠需要转义
技术分享图片

2个下划线就是转义

技术分享图片

 

 技术分享图片

贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
技术分享图片

结果就是一项

技术分享图片

技术分享图片

因为它要回到原来很难,所以它尽可能,多匹配一点
 
匹配多次,直到遇到<停下来
技术分享图片

?先匹配后面的。

技术分享图片

几个常用的非贪婪匹配Pattern

匹配字符 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
   

 

 

python全栈学习--day31(正则)

标签:连续   com   表示   bsp   代码   nbsp   特殊字符   操作   很多   

原文地址:https://www.cnblogs.com/haowen980/p/8968878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!