34.从入门到精通:Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例

简介: 34.从入门到精通:Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例

检索和替换

在 Python 的 re 模块中,可以使用 re.sub() 函数来进行字符串的检索和替换。

re.sub() 函数的语法如下:

re.sub(pattern, repl, string, count=0, flags=0)

其中,pattern 表示要匹配的正则表达式,repl 表示要替换成的字符串,string 表示要进行替换的字符串,count

表示最多替换的次数,flags 表示正则表达式的匹配模式。

以下是一个简单的例子,说明如何使用 re.sub() 函数进行字符串的替换:

import re
text = "Hello, world! This is a test."
pattern = r"\b\w{4}\b"
repl = "****"
new_text = re.sub(pattern, repl, text)
print(new_text)

在这个例子中,首先定义了一个要进行替换的字符串 text,然后使用正则表达式 \b\w{4}\b 匹配所有长度为 4 的单词,并使用

**** 进行替换。最后使用 re.sub() 函数进行替换,并将替换后的字符串赋值给 new_text 变量,最后输出 new_text。


repl 参数是一个函数

  • 在 Python 的 re 模块中,re.sub() 函数可以用于在字符串中替换匹配的子串。re.sub() 函数的第一个参数是正则表达式,第二个参数是要替换成的字符串,第三个参数是要搜索的字符串。
  • 除此之外,re.sub()函数还可以接受一个可调用对象作为第二个参数,这个可调用对象可以根据匹配结果返回一个新的字符串。这个可调用对象通常被称为 repl 函数。

以下是一个简单的例子,说明如何使用 repl 函数:

import re
# 要替换的字符串
text = "Hello, world! This is a test."
# 替换所有的单词为大写字母
pattern = r"\w+"
new_text = re.sub(pattern, lambda match: match.group().upper(), text)
# 输出替换结果
print(new_text)

在这个例子中,首先定义了一个要替换的字符串 text,然后使用 re.sub() 函数替换所有的单词为大写字母。在第二个参数中,使用了一个匿名函数来将匹配结果转换为大写字母。最后输出替换结果。


需要注意的是,repl 函数必须接受一个参数,这个参数是一个匹配对象,可以通过调用 group() 方法来获取匹配的字符串。repl 函数可以返回任何类型的对象,但必须返回一个字符串,否则会抛出 TypeError 异常。


正则表达式对象

在 Python 的 re 模块中,正则表达式对象是通过 re.compile() 函数创建的。正则表达式对象可以重复使用,可以提高程序的效率,尤其是在需要多次使用同一个正则表达式时。

以下是一个简单的例子,说明如何使用正则表达式对象:

import re
# 创建正则表达式对象
pattern = re.compile(r'\d+')
# 使用正则表达式对象进行匹配
text = 'There are 123 apples and 456 oranges.'
match_obj = pattern.search(text)
print(match_obj.group())  # 输出结果:123

在这个例子中,首先使用 re.compile() 函数创建了一个正则表达式对象 pattern,然后使用 pattern.search( 方法进行匹配。正则表达式对象可以多次使用,可以在程序的其他地方使用同一个对象进行匹配。

  • 需要注意的是,使用正则表达式对象进行匹配时,可以使用正则表达式对象的 search()、match()、findall()等方法。另外,正则表达式对象还可以通过调用 pattern.sub() 方法来进行替换操作。
  • 正则表达式对象还可以接受一些参数,用于指定正则表达式的匹配模式。例如,可以通过 re.compile() 函数的 flags参数来指定正则表达式的匹配模式。


正则表达式修饰符 - 可选标志

在 Python 的 re 模块中,可以使用正则表达式修饰符(也称为可选标志)来更改正则表达式的匹配行为。正则表达式修饰符是在正则表达式模式中以特殊字符的形式出现的,用于指定匹配模式。

以下是一些常用的正则表达式修饰符:


ba963fe4be29476283ff70084e5b42ff.png


可以使用 re.compile() 函数来指定正则表达式修饰符。例如:

import re
# 不区分大小写的匹配
pattern = re.compile("hello", re.IGNORECASE)
match_obj = pattern.search("Hello, world!")
print(match_obj.group())  # 输出 "Hello"

在这个例子中,首先使用 re.compile() 函数指定了正则表达式模式 “hello” 和修饰符re.IGNORECASE,这表示进行不区分大小写的匹配。然后使用 pattern.search() 函数在字符串 “Hello,world!” 中搜索匹配结果,最后输出匹配结果。

  • 需要注意的是,正则表达式修饰符可以同时使用多个,可以通过按位或运算符 | 来组合它们。例如,re.IGNORECASE | re.MULTILINE 表示同时使用不区分大小写的匹配和多行匹配。


正则表达式模式*

在 Python 的 re 模块中,正则表达式模式是用于匹配字符串的模式。正则表达式模式由一些特殊字符和普通字符组成,用于指定匹配规则。

以下是一些常用的正则表达式模式:


bba99196a804410a8a896cfa2a3ea762.png


需要注意的是,正则表达式模式中的特殊字符需要进行转义,例如 . 表示匹配一个点号。可以使用反斜杠 \ 来进行转义。

以下是一个简单的例子,说明如何使用正则表达式模式:

import re
# 匹配所有的数字
pattern = "\d+"
match_obj = re.search(pattern, "There are 123 apples and 456 oranges.")
print(match_obj.group())  # 输出 "123"

在这个例子中,正则表达式模式 “\d+” 表示匹配一个或多个数字字符。使用 re.search() 函数在字符串 “There are

123 apples and 456 oranges.” 中搜索匹配结果,最后输出匹配结果。


正则表达式实例

下面是一些正则表达式的实例:

匹配手机号码

import re
pattern = re.compile(r'^1[3-9]\d{9}$')
phone_number = '13888888888'
if pattern.match(phone_number):
    print('Valid phone number')
else:
    print('Invalid phone number')

匹配电子邮件地址

import re
pattern = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
email = 'example@example.com'
if pattern.match(email):
    print('Valid email address')
else:
    print('Invalid email address')

匹配身份证号码

import re
pattern = re.compile(r'^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9Xx]$')
id_number = '110101199001011234'
if pattern.match(id_number):
    print('Valid ID number')
else:
    print('Invalid ID number')

匹配 URL

import re
pattern = re.compile(r'^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/\S*)?$')
url = 'https://www.example.com/path/to/page.html'
if pattern.match(url):
    print('Valid URL')
else:
    print('Invalid URL')

这些正则表达式只是一些常见的例子,实际上正则表达式可以匹配各种各样的文本模式。需要注意的是,正则表达式的性能可能会受到匹配的文本长度和复杂度的影响,需要谨慎使用。

相关文章
|
7天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
8天前
|
Python
深入理解Python装饰器:从入门到实践####
本文旨在通过简明扼要的方式,为读者揭开Python装饰器的神秘面纱,从基本概念、工作原理到实际应用场景进行全面解析。不同于常规的摘要仅概述内容概要,本文将直接以一段精炼代码示例开篇,展示装饰器如何优雅地增强函数功能,激发读者探索兴趣,随后深入探讨其背后的机制与高级用法。 ####
38 11
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
5天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
4天前
|
设计模式 缓存 开发框架
Python中的装饰器:从入门到实践####
本文深入探讨了Python中装饰器的工作原理与应用,通过具体案例展示了如何利用装饰器增强函数功能、提高代码复用性和可读性。读者将学习到装饰器的基本概念、实现方法及其在实际项目开发中的实用技巧。 ####
17 3
|
7天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
6天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
6天前
|
人工智能 数据挖掘 程序员
Python编程入门:从零到英雄
【10月更文挑战第37天】本文将引导你走进Python编程的世界,无论你是初学者还是有一定基础的开发者,都能从中受益。我们将从最基础的语法开始讲解,逐步深入到更复杂的主题,如数据结构、面向对象编程和网络编程等。通过本文的学习,你将能够编写出自己的Python程序,实现各种功能。让我们一起踏上Python编程之旅吧!
|
7天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。