Python正则表达式入门用法(下)

Python的正则表达式模块是re。要使用它,需要先导入re模块。下面是一些常用的正则表达式操作:

  1. re.match(pattern, string): 从字符串的开始位置匹配一个模式,并返回匹配对象。如果匹配成功,则返回匹配对象;如果匹配失败,则返回None。

  2. re.search(pattern, string): 在字符串中搜索匹配模式的第一个位置,并返回匹配对象。如果匹配成功,则返回匹配对象;如果匹配失败,则返回None。

  3. re.findall(pattern, string): 在字符串中搜索匹配模式的所有位置,并返回一个列表。列表中的每个元素都是一个匹配对象。

  4. re.sub(pattern, repl, string): 将字符串中匹配模式的部分替换为指定的字符串,并返回替换后的字符串。

  5. re.split(pattern, string): 根据匹配模式分割字符串,并返回一个列表。

下面是一些常用的正则表达式元字符和修饰符:

  1. 元字符:

    • . : 匹配除换行符之外的任意字符。
    • \d : 匹配任意数字。
    • \D : 匹配任意非数字。
    • \w : 匹配任意字母、数字和下划线。
    • \W : 匹配任意非字母、数字和下划线。
    • \s : 匹配任意空白字符,包括空格、制表符、换行符等。
    • \S : 匹配任意非空白字符。
    • \b : 匹配一个单词边界,即单词和非单词之间的位置。
    • \B : 匹配一个非单词边界。
  2. 修饰符:

    • re.I : 忽略大小写匹配。
    • re.M : 多行匹配,^和$可以匹配每一行的开始和结束。
    • re.S : 单行匹配,.可以匹配换行符。

除了以上介绍的常用操作、元字符和修饰符,还有更多的正则表达式操作和特殊字符可以在Python的re模块中使用。

判断以某个内容为开始,某个内容为结束的字符串

例如:

# coding=utf-8

import re

input_str = input()

a = re.search(r'^lxj', input_str)

if a is not None:
    print(a.span())
else:
    print(a)

b = re.search(r'lxj$', input_str)

if b is not None:
    print(b.span())
else:
    print(b)

在Python的正则表达式中,有几个通配符可以用来匹配不同类型的字符。

  1. "."(句点):匹配任意单个字符,除了换行符(\n)以外的任何字符。

例如,正则表达式"a.b"可以匹配"acb"、"axb"、"a6b"等。

  1. "*"(星号):匹配前面的字符零次或多次。

例如,正则表达式"ab*c"可以匹配"ac"、"abc"、"abbc"、"abbbc"等。

  1. "+"(加号):匹配前面的字符至少一次或多次。

例如,正则表达式"ab+c"可以匹配"abc"、"abbc"、"abbbc"等,但不能匹配"ac"。

  1. "?"(问号):匹配前面的字符零次或一次。

例如,正则表达式"ab?c"可以匹配"ac"、"abc",但不能匹配"abbc"。

这些通配符可以与其他正则表达式元字符和字符类一起使用,以匹配更复杂的模式。

例如:

# coding=utf-8

import re

input_str = input()

a = re.findall(r'.ython', input_str)

print(a)
# coding=utf-8

import re

input_str = input()

# 编写获取she或者he的字符串,并存储到变量a中
a = re.findall(r's?he', input_str)


print(a)

重复次数
在正则表达式中,我们可以使用 `{N}` 来表示一个字符组连续匹配 N 次。例如:

import re

a = re.findall(r'[\d]{4}-[\d]{7}', '张三:0731-8825951,李四:0733-8794561')
print(a)

输出为:


['0731-8825951', '0733-8794561']
 

重复区间
有时候,我们不知道具体匹配字符组要重复的次数,可以使用 `{M,N}` 来表示重复的区间,其中 M 是下界,N 是上界。例如:

import re

a = re.search(r'[\d]{3,4}', '0731')
b = re.search(r'[\d]{3,4}', '073')
print(a)
print(b)

执行结果输出如下:


<re.Match object; span=(0, 4), match='0731'>
<re.Match object; span=(0, 3), match='073'>
 

非贪婪模式
默认情况下,正则表达式是贪婪模式,即尽可能多地匹配字符。要使用非贪婪模式,可以在表达式后面加上 `?`。例如:

import re

a = re.search(r'[\d]{3,4}?', '0731')
b = re.search(r'[\d]{3,4}?', '073')
print(a)
print(b)

执行结果输出如下:
<re.Match object; span=(0, 3), match='073'>
<re.Match object; span=(0, 3), match='073'>
 

# coding=utf-8

import re

input_str = input()
# 1、基于贪心模式匹配字符串中重复出现2个数字的子字符串,并存储到变量a。

a = re.findall(r'[\d]{2}', input_str)

print(a)

# 2、基于贪心模式匹配字符串中重复出现4-7个数字的子字符串,并存储到变量b。

b = re.findall(r'[\d]{4,7}', input_str)

print(b)

在正则表达式中,我们经常会遇到需要匹配一个或多个重复的字符的情况。为了简化这种常见需求,正则表达式提供了两个特殊的符号:

  * `+`:表示匹配一次或多次重复的字符。例如,`[\d]+` 可以匹配一个或多个数字字符。
  * `*`:表示匹配零次或多次重复的字符。例如,`[\d]*` 可以匹配零个或多个数字字符。

使用这两个符号来匹配字符串中的连续数字,例如:

import re

# 使用 + 符号匹配至少一个数字
a = re.findall(r'\d+', '0731-8859456')
print(a)  # 输出: ['0731', '8859456']

# 使用 * 符号匹配零个或多个数字
b = re.findall(r'\d*', '0731-8859456')
print(b)  # 输出: ['0731', '8859456']

在这个例子中,我们使用了 `re.findall()` 函数来查找所有匹配的数字序列。通过使用 `+` 和 `*` 符号,我们可以更简洁地表示匹配一个或多个数字的需求。

# coding=utf-8

import re

input_str = input()
# 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。
a = re.findall(r'[\d]{5,}', input_str)

print(a)

# 2、匹配字符串中都为数字的子字符串,并存储到变量b。
b = re.findall(r'[\d]+[0-9]', input_str)

print(b)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

盛元广通打造智慧校园实验室安全管理系统

盛元广通智慧校园实验室安全管理系统以安全为重点&#xff0c;构建由学校、二级单位、实验室组成的三级联动的实验室安全多级管理体系、多类用户角色&#xff0c;内置教育部标准检查表&#xff0c;支撑实验室相关业务过程的智慧管理。实现通过PC端/手机移动端开展检查工作、手机…

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域&#xff0c;它在许多应用中扮演着关键角色&#xff0c;如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一&#xff0c;它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

Vue86-Vuex中的getters属性

一、getters的使用 1-1、index.js中getters的书写 计算属性computed靠return获得返回值&#xff01; 1-2、组件中getters的调用 state是数据源&#xff0c;getters是拿着数据源里的东西进行一番加工。像极了&#xff1a;data和computed 二、小结

Map Set(Java篇详解)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ 等 &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持…

设备的智能决策AI大模型与ESP32-S3芯片应用,启明云端乐鑫代理商

在数字化浪潮的推动下&#xff0c;智能家居、智能安防、智能设备等领域对AI技术的需求日益增长&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成为推动各行各业创新的核心力量。 AI大模型技术以其强大的数据处理能力和深度学习能力&#xff0c;正在成为智能时代的新动…

图书电商引入实在Agent:自动化运营提效80%,节省人天1000+

某知名教辅图书品牌深耕中小学教辅图书领域&#xff0c;是中国最具影响力的教育出版策划与发行集团之一&#xff0c;以丰富的图书品类&#xff0c;满足了小学、初中、高中各年龄段读者多元化的阅读需求。 2023年&#xff0c;该品牌在运营、客服等多部门超60个场景中部署实在Ag…

维护el-table列,循环生成el-table

1、lib/setting.js&#xff08;维护table列&#xff09; const columns[{ label: 类型, prop: energyName, width: 150, isText: true },{ label: 消耗量(t或10⁴m), prop: inputNum, isInput: true },{label: CO₂,children: [// { label: 核算因子, prop: co2FactorValue, w…

IC烧录员-带着工程师的梦想远航!

如果说软件工程师是代码程序的创造者&#xff0c;那么IC烧录员就是把工程师们辛苦敲代码&#xff0c;日夜辛劳的成果烧录到芯片里面的实践者&#xff0c;是他们&#xff0c;让工程师们的梦想运用到实践中&#xff0c;是他们带着工程师的梦想远航&#xff0c;他们的薪酬或许没有…

SprongBoot3整合Knife4j实现在线接口文档

大家好&#xff0c;我是晓凡。 写在前面 在上一篇文章&#xff0c;我们详细介绍了SpringBoot3 怎么整合SpringDoc实现在线接口文档。但是&#xff0c;有不少小伙伴 都觉得接口界面太丑了。有没有什么更美观一点的UI界面呢&#xff1f; 当然是有的了&#xff0c;毕竟这是一个…

temu a4接口 逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

c++习题09-分离整数的各个数

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 二&#xff0c;思路 一开始我想到的是将简单容易输出的1000以内的数先进行相应的运算&#xff0c;再输出之后再对1000以上的数字进行判断&#xff08;主要还是想先将很大的数变小&#x…

每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构和逻辑 时间复杂度 空间复杂度 代码优化建议 总结 我要更强 …

生物分子生物学实验过程的自动化与智能监控系统设计

开题报告&#xff1a;生物分子生物学实验过程的自动化与智能监控系统设计 一、引言 随着生物科学技术的飞速发展&#xff0c;生物分子生物学实验在科研、医疗、农业等领域的应用日益广泛。然而&#xff0c;传统的生物分子生物学实验过程大多依赖于人工操作&#xff0c;存在操…

组件丰富、支持2/3D数据可视化的编辑器平台软件?

数据可视化编辑器通常用于创建交互式的图表和模型&#xff0c;可以帮助用户以更直观的方式展示数据。一些在线平台软件提供了丰富的组件&#xff0c;支持2D和3D数据可视化&#xff1a; 1、Plotly - 提供了多种语言的库&#xff0c;支持在线创建交互式图表&#xff0c;包括2D和…

【2023ICPC网络赛I 】E. Magical Pair

当时在做洛谷U389682 最大公约数合并的时候我就想到把每个质因子分解出来然后跑高维前缀和&#xff0c;但是那一道题不是用这个方法&#xff0c;所有我也一直在思考这种做法是不是真的有用。因为昨天通过2024上海大学生程序设计竞赛I-六元组计数这道题我了解到了不少关于原根的…

平安养老险安徽分公司:助力乡村振兴 保险知识进农村

为深入宣传普及保险理念&#xff0c;进一步提升服务品质&#xff0c;营造“78全国保险公众宣传日”活动氛围&#xff0c;助力保险业健康稳定发展&#xff0c;近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;安徽分公司走进安庆市宿松…

智能座舱相关问答

一、基本概念与理解 智能座舱的定义 回答&#xff1a;智能座舱是指在现代交通工具中&#xff0c;通过应用智能技术&#xff0c;实现对乘客座舱环境和服务进行智能化管理和优化的系统。它不仅提供更加舒适的乘坐体验&#xff0c;还能通过精确的数据分析和实时监控&#xff0c;提…

教育行业的网络安全:保护学生数据与防范网络欺凌

在数字化的春风中&#xff0c;教育行业迎来了知识的繁花似锦&#xff0c;然而&#xff0c;随之而来的网络安全风暴也悄然逼近。学生数据的脆弱性与网络欺凌的阴影交织成一幅复杂的画卷&#xff0c;呼唤着教育工作者与技术专家共同编织一张密不透风的网络安全之网。本文深入探讨…

A*——AcWing 178. 第K短路

A* 定义 A算法是一种广泛应用于路径搜索和图遍历的启发式搜索算法&#xff0c;它结合了最好优先搜索和Dijkstra算法的优点&#xff0c;旨在找到从初始节点到目标节点的最短路径。A算法在游戏AI、机器人导航、地图路线规划等领域有广泛应用。 A*算法的核心在于使用一个评估函…

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…