34.Python从入门到精通—Python3 正则表达式检索和替换

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

    • 检索和替换
    • repl 参数是一个函数
    • 正则表达式对象
    • 正则表达式修饰符 - 可选标志
    • 正则表达式模式*
    • 正则表达式实例

检索和替换

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

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

其中,pattern 表示要匹配的正则表达式,repl 表示要替换成的字符串,string 表示要进行替换的字符串,count
表示最多替换的次数,flags 表示正则表达式的匹配模式。

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

import retext = "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。

需要注意的是,re.sub() 函数并不会修改原始字符串,而是返回一个新的字符串。如果要修改原始字符串,可以直接对原始字符串进行赋值。

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 模块中,可以使用正则表达式修饰符(也称为可选标志)来更改正则表达式的匹配行为。正则表达式修饰符是在正则表达式模式中以特殊字符的形式出现的,用于指定匹配模式。
以下是一些常用的正则表达式修饰符:

在这里插入图片描述

可以使用 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 模块中,正则表达式模式是用于匹配字符串的模式。正则表达式模式由一些特殊字符和普通字符组成,用于指定匹配规则。
以下是一些常用的正则表达式模式:
在这里插入图片描述

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

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 repattern = 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 repattern = 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 repattern = 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 repattern = 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')

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的可变字符串

Java中的可变字符串 一、什么是可变字符串二、可变字符串的使用场景以及使用步骤1.新建一个可变字符串2.可变字符串的一系列方法 一、什么是可变字符串 可变字符串是Java.lang包下的 在我们学习到JDBC的时候需要将原有的sql语句根据不同的差异添加一段新的关键字或者单词&…

Python 代码混淆工具概述

在保护Python代码安全方面,有多种混淆工具可供选择,包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况,以及在实际应用中的注意事项。 📝 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…

九州金榜家庭教育:关注孩子心理健康,增强亲子沟通

家庭教育现在越来越受重视,尤其孩子心理健康,当下社会,孩子心理健康问题频出,很多地方不时传出孩子轻生的新闻,这就是在教育过程中,沟通出现了严重问题,随着心理变化产生,孩子这时候…

MySQL进阶-----SQL提示与覆盖索引

目录 前言 一、SQL提示 1.数据准备 2. SQL的自我选择 3.SQL提示 二、覆盖索引 前言 MySQL进阶篇的索引部分基本上要结束了,这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先,剩下的内容就…

Scala中如何使用Jsoup库处理HTML文档?

在当今互联网时代,数据是互联网应用程序的核心。对于开发者来说,获取并处理数据是日常工作中的重要一环。本文将介绍如何利用Scala中强大的Jsoup库进行网络请求和HTML解析,从而实现爬取京东网站的数据,让我们一起来探索吧&#xf…

SWM341系列应用(上位机应用)

SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象:客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局,反馈在模拟运行时(PC端)流畅,在Demo平台(设备端)运行卡顿。 分析及解决&…

第N6周:使用Word2vec实现文本分类

import torch import torch.nn as nn import torchvision from torchvision import transforms,datasets import os,PIL,pathlib,warnings #忽略警告信息 warnings.filterwarnings("ignore") # win10系统 device torch.device("cuda"if torch.cuda.is_ava…

OpenHarmony实战开发-如何通过Stage模型实现一个简单的游戏卡片

介绍 本示例展示了如何通过Stage模型实现一个简单的游戏卡片。 通过卡片支持的点击事件进行交互,让用户通过点击的先后顺序把一个乱序的成语排列成正确的成语。使用了C和TS的混合编程方式,将获取随机数的能力下沉到C实现,并通过NAPI的能力将…

动态规划详细讲解c++|经典例题讲解认识动态规划|0-1背包问题详解

引言 uu们,你们好!这次的分享是动态规划,其中介绍了动态规划的相关概念和做题模板(三要素),同时为了uu们对动态规划方法有更加形象的认识,特地找了两个经典问题,和大家一起分析。并…

数字乡村创新之路:科技引领农村实现高质量发展

随着信息技术的快速发展,数字乡村建设已成为推动农村高质量发展的重要引擎。数字乡村通过科技创新,不仅改变了传统农业生产方式,也提升了乡村治理水平,为农民带来了更加便捷的生活。本文将从数字乡村的内涵、科技引领农村高质量发…

SV学习笔记(三)

类和对象概述 类和对象 面向对象的编程语言更符号人对自然语言的理解(属性property和功能function)。 这个世界由无数的类(class)和对象(object)构成的。 类是将相同的个体抽象出来的描述方式&#xff0c…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念,概念上简单来讲类是它是一组关系密切属性的集合,所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种,比如has a, is a,has some等&…