Python 编程 | 连载 24 - 正则表达式

简介: Python 编程 | 连载 24 - 正则表达式

一、正则表达式

认识正则表达式

正则表达式是一个特殊的字符序列,便于检查字符串是否与某种模式匹配,正则表达式也是对字符串的处理,通过定义一个规则,使得从字符串中匹配出符合规则的字符串,正则表达式可以:

  • 判断一个字符串是否符合规则,如手机号邮箱判断等
  • 取出指定数据
  • 匹配指定格式的信息

正则表达式通用性强,可适用于很多编程语言。

正则表达式匹配字符

正则表达式匹配字符串需要的条件:

  • re模块
  • 匹配规则
  • 匹配范围,既从哪个字符串中尽心匹配

正则表达式中的特殊字符:

特殊字符 描述
\d 匹配任何十进制的数字,与[0-9]一致
\D 匹配任意非数字
\w 匹配任何字母数字下划线字符
\W 匹非字母数字以及下划线
\s 匹配任何空格字符,与[\n\t\r\v\f]相同
\S 匹配任意非空字符
\A 匹配字符串的起始
\Z 匹配字符串的结束I
. 匹配任何字符,除\n之外
import re
data = 'I am Thor Odinson, 1500 years old'
print('匹配到的数字为:{}'.format(re.findall('\d', data)))
print('匹配到的空格为:{}'.format(re.findall('\s', data)))
print('匹配到的字符为:{}'.format(re.findall('\w', data)))
print('匹配起始字符串:{}'.format(re.findall('\AI am', data)))
print('匹配末尾字符串:{}'.format(re.findall('old\Z', data)))
print('匹配任何字符:{}'.format(re.findall('.', data)))
复制代码

84904e5ca8394d7fbde68fecb7b36404_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

使用正则表达式定义函数,操作字符串。

import re
def contain_num(data):
    res = re.findall('\d', data)
    if len(res) > 0:
        return True
    return False
def delete_num(data):
    # 匹配出非数字
    res = re.findall('\D', data)
    return ''.join(res)
if __name__ == '__main__':
    data = '95 Anzan Hwy, Ashforad SA 5035 Adelaide'
    contain = contain_num(data)
    print(contain)
    _data = delete_num(data)
    print(_data)
复制代码

image.png

使用正则表达式实现 startwith 函数和 endwith 函数

import re
def starts_with(start, data):
    # 构造正则表达式
    _start = '\A%s' % start
    res = re.findall(_start, data)
    if len(res) > 0:
        return True
    return False
def ends_with(end, data):
    _end = '{}\Z'.format(end)
    res = re.findall(_end, data)
    if len(res) > 0:
        return True
    return False
if __name__ == '__main__':
    data = '13 Ramel Way, Pakenham VIC'
    res_01 = starts_with('13', data)
    res_02 = starts_with('afeae', data)
    res_03 = ends_with('VIC', data)
    print(res_01)
    print(res_02)
    print(res_03)
复制代码

image.png

二、正则表达式的量词与组

正则表达式中的符号:

  • |:或的意思,re1|re2表示匹配表达式1或者表达式2
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • *:匹配0次或者多次前面出现的正则表达式
  • +:匹配1次或者多次前面出现的正则表达式
  • {N}:匹配N次前面出现的正则表达式
  • {M,N}:匹配M~N次前面出现的正则表达式
  • [...]:匹配来自字符集的任意单一字符
  • [x-y]:匹配x~y范围内的单一字符
  • [^..]:不匹配此字符集中出现的任何一个字符,包括某一范围内的字符
  • \:将特殊字符转义

正则表达式中()表示在匹配规则中获取指定的数据。贪婪与贪婪,0或者多次属于贪婪模式,可以通过?组合变成非贪婪模式。

三、正则表达式模块

正则表达式模块的常用方法有:

方法 描述
findall(pattern, string[,flags]) 查找字符串中所有非重复出现的正则表达式模式,返回一个列表
search(pattern, string, flags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式,如果匹配成功返回匹配对象,否则返回None
group(num) 返回整个匹配对象,或者编号为num的特定子组
groups() 返回一个包含所有匹配子组的元素,如果没有成功匹配,返回一个空元祖
split(pattern, string, max=0) 根据正则表达式的模式分隔符,split函数可以将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次
match(pattern, string, flags=0) 尝试使用带有可选标记的正则表达式的模式来匹配字符串,匹配成功返回匹配对象,否则返回None
complie(pattern, flags=0) 定义一个匹配规则的对象
import re
def identity(url):
    re_obj = re.compile('[a-zA-Z]{4,5}://\w*.*\w+.\w+')
    print(re_obj)
    res = re_obj.findall(url)
    if len(res) != 0:
        return True
    return False
def get_url(url):
    re_obj = re.compile('[https://|http://](\w*.*\w+.\w+)')
    res = re_obj.findall(url)
    if len(res) != 0:
        return res[0]
    else:
        return False
def get_email(email):
    re_obj = re.compile('.+@.+.[a-zA-Z]+')
    res = re_obj.findall(email)
    return res
def get_html_data(data):
    re_obj = re.compile('style="(.*?)"')
    res = re_obj.findall(data)
    return res
def get_all_data_html(data):
    re_obj = re.compile('="(.+?)"')
    res = re_obj.findall(data)
    return res
if __name__ == '__main__':
    result = identity('http://www.baidu.com/')
    print(result)
    result = get_url('https://www.baidu.com/')
    print(result)
    result = get_email('thor@asgard.com')
    print(result)
    html = ('<div class="s-top-nav" style="display:none;">'
        '</div><div class="s-center-box"></div>')
    result = get_html_data(html)
    print(result)
    result = get_all_data_html(html)
    print(result)
    re_g = re.compile(('<div class="(.*?)" style="(.*?)">'
                       '</div><div class="(.*?)"></div>'))
    result = re_g.search(html)
    print(result.groups())
    print(result.group(1))
    print(result.group(2))
    print(result.group(3))
    # print(result.group(4))
    re_g = re.compile('\s')
    result = re_g.split(html)
    print(result)
    re_g = re.compile('<div class="(.*?)"')
    result = re_g.match(html)
    print(result.span())
    print(html[: 22])
复制代码

image.png


相关文章
|
5天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
11天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
11天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
11天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
2天前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
5天前
|
存储 人工智能 数据挖掘
Python编程入门:打造你的第一个程序
本文旨在为初学者提供Python编程的初步指导,通过介绍Python语言的基础概念、开发环境的搭建以及一个简单的代码示例,帮助读者快速入门。文章将引导你理解编程思维,学会如何编写、运行和调试Python代码,从而开启编程之旅。
27 2
|
6天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
16 1
|
9天前
|
存储 网络协议 IDE
从零起步学习Python编程
从零起步学习Python编程
|
12天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。
|
7天前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
17 0
下一篇
无影云桌面