首页 > 编程语言 > 详细

Python笔记_第四篇_高阶编程_正则表达式_1.正则表达式简介(re模块)

时间:2019-05-22 17:39:42      阅读:135      评论:0      收藏:0      [点我收藏+]

1. 从一个判断手机号的问题引入

  如果给你一个字符串,去判断是否是一个手机号码,我们通过之前的学习可以有如下代码:

# 如果用普通的方式去检验一个电话号码非常麻烦。
def checkPhone(str):
    if len(str) != 11:
        return False
    elif str[0] != "1":
        return False
    elif str[1:3] != "39" and str[1:3] != "31":
        return False
    for i in range(3,11):
        if str[i] < "0" or str[i] > "9":
            return False
    return True

print(checkPhone("13912345678"))
print(checkPhone("139123456785"))
print(checkPhone("1391234a678"))
print(checkPhone("23912345678"))
print(checkPhone("19012345678"))
# True
# False
# False
# False
# False

  从这个代码中我们可以看到过于繁琐,因此我们引入正则表达式的概念(regular express)

 

2. 正则概述

  正则语言是一种简单的寄宿语言,在大多数的语言当中都会有。因此py在1.5以后增加了re模块,提供了正则表达式模式。库名“import re”。

  re模块:这个模块使py语言拥有了全部的正则表达式的功能。

  正则语言其实就是一种对于查找内容的元字符表达。

 

3. re.match()、re.search()、re.findall()

  这三个函数主要是匹配正则表达式的。其中.span()是这些函数下面的一个方法,返回一个元组用于保存找到的位置的下标。

  3.1 re.match()函数

  原型:re.match(pattern,string,flags=0)

  参数:

    pattern:要匹配的正则表达式

    strings:要匹配的字符串

    flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:

        re.I:忽略大小写

        re.L:做本地化识别

        re.M:多行匹配,影响^和$

        re.S:使.(点)匹配包括换行符在内的所有字符

        re.U:根据Unicode字符集解析字符,影响\w \W \b \B

        re.X:以更灵活的格式理解正则表达式

  功能:尝试从字符串的起始位置,匹配一个模式,如果不是起始位置匹配成功的话,也会返回None值,也就是说要从头开始匹配。只看头。

  实例1:简单举例,查看一个网址前面是否有www

# 简单的举例,看一下一个网址前面是否有www
# www.baidu.com
# 扫描整个字符串,返回从其实位置成功的匹配。

print(re.match("www","www.baidu.com"))
# <re.Match object; span=(0, 3), match=www>

print(re.match("www","ww.baidu.com"))
# 找不到返回:None

print(re.match("www","baidu.wwwcom"))
# 找不到返回:None,因为要从头开始匹配

print(re.match("www","wwW.baidu.com",flags=re.I))
# 匹配模式忽略大小写,能够查到
# <re.Match object; span=(0, 3), match=wwW>

print(re.match("www","www.baidu.com").span())
# (0, 3),返回字符串对应的位置

 

  3.2 re.search()函数

  原型:re.search(pattern,string,flags=0)

  参数:

    pattern:要匹配的正则表达式

    strings:要匹配的字符串

    flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:

        re.I:忽略大小写

        re.L:做本地化识别

        re.M:多行匹配,影响^和$

        re.S:使.(点)匹配包括换行符在内的所有字符

        re.U:根据Unicode字符集解析字符,影响\w \W \b \B

        re.X:以更灵活的格式理解正则表达式

  功能:扫描整个字符串,并返回第一个成功匹配,并不是从头匹配。只看第一个。

  实例2:

print(re.search("Thomas","Thomas good man is Thomas!Thomas is nice"))
# <re.Match object; span=(12, 18), match=Thomas>
# 返回的是第一个成功匹配的位置(12,18)

# 其他例子如上(略)

 

  3.3 re.finall()函数:

  原型:re.findall(pattern,string,flags=0)

  参数:

    pattern:要匹配的正则表达式

    strings:要匹配的字符串

    flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:

        re.I:忽略大小写

        re.L:做本地化识别

        re.M:多行匹配,影响^和$

        re.S:使.(点)匹配包括换行符在内的所有字符

        re.U:根据Unicode字符集解析字符,影响\w \W \b \B

        re.X:以更灵活的格式理解正则表达式

  功能:扫描整个字符串,并返回结果列表。看所有的,只要有全部列出来。

  实例3:

print(re.findall("Thomas","good man is Thomas!Thomas is nice",re.X))
# <re.Match object; span=(12, 18), match=Thomas>
# [Thomas, Thomas]

# 其他例子如上(略)

 

Python笔记_第四篇_高阶编程_正则表达式_1.正则表达式简介(re模块)

原文:https://www.cnblogs.com/noah0532/p/10906855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!