ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-22 16:50:00  阅读:233  来源: 互联网

标签:www Python 匹配 正则表达式 Thomas re print


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']

# 其他例子如上(略)

 

标签:www,Python,匹配,正则表达式,Thomas,re,print
来源: https://www.cnblogs.com/noah0532/p/10906855.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有