Python正则

match()search()方法是re模块中用于正则表达式匹配的两个函数,而不是research()

match()方法从字符串开头开始匹配,只有当模式从字符串的起始位置开始匹配成功时才会返回匹配对象。如果模式无法从字符串起始位置匹配成功,则返回None。

search()方法在整个字符串中搜索匹配模式的第一个位置,并返回匹配对象。它不要求模式从字符串的起始位置匹配成功,只要字符串中存在匹配的内容即可。

下面是一个示例代码来说明两者之间的不同:

import repattern = r'abc'
string = 'xabcdefg'# 使用 match() 方法进行匹配
match_result = re.match(pattern, string)
print(match_result)  # None,因为模式无法从字符串起始位置匹配成功# 使用 search() 方法进行匹配
search_result = re.search(pattern, string)
print(search_result)  # <re.Match object; span=(1, 4), match='abc'>,匹配成功并返回匹配对象

总结:

  • match()方法从字符串起始位置开始匹配,如果匹配成功则返回匹配对象,否则返回None。
  • search()方法在整个字符串中搜索匹配模式的第一个位置,如果匹配成功则返回匹配对象,否则返回None。

compile()匹配模式
在Python中,re.compile()函数用于将正则表达式模式编译为一个对象,以便可以重复使用该模式进行匹配。下面是一些常用的匹配模式及相应的示例:

  1. re.IGNORECASE:不区分大小写匹配
import repattern = re.compile(r"hello", re.IGNORECASE)
result = pattern.search("Hello World")
print(result.group())  # 输出: Hello
  1. re.MULTILINE:多行匹配,使^$匹配每行的开始和结束
import repattern = re.compile(r"^hello", re.MULTILINE)
result = pattern.findall("hello world\nhello, python")
print(result)  # 输出: ['hello', 'hello']
  1. re.DOTALL:匹配任意字符的模式,包括换行符\n
import repattern = re.compile(r"hello.*world", re.DOTALL)
result = pattern.search("hello\nworld")
print(result.group())  # 输出: hello\nworld
  1. re.ASCII:只匹配ASCII字符的模式
import repattern = re.compile(r"[a-z]", re.ASCII)
result = pattern.findall("Hello, Python")
print(result)  # 输出: ['e', 'l', 'l', 'o', 'y', 't', 'h', 'o', 'n']
  1. re.DEBUG:打印调试信息,方便调试正则表达式
import repattern = re.compile(r"\d{3}-\d{4}", re.DEBUG)
result = pattern.search("My phone number is 123-4567")
# 输出调试信息:
# MAX_REPEAT 3 4
#   LITERAL 45
#     IN
#       RANGE (48, 57)
#     MAX_REPEAT 0 4
#       IN
#         RANGE (48, 57)
#   LITERAL 45
#     IN
#       RANGE (48, 57)
print(result.group())  # 输出: 123-4567

这些只是一些常用的匹配模式,re.compile()函数还支持其他更多的选项和模式。可以通过查阅Python官方文档来了解更多详细信息。

Python分组应用
正则表达式分组是指在正则表达式中用括号 () 将一部分模式进行分组。分组的概念和用法如下:

  1. 分组概念:将不同的模式按照逻辑关系组合起来,形成一个整体。分组可以被当做一个整体来操作,方便进行匹配、替换和提取等操作。分组可以嵌套使用。

  2. 用法:

    • 匹配分组:使用括号将要匹配的部分模式包围起来,形成一个分组。可以使用“|”将多个分组进行选择匹配。
    • 替换分组:使用括号将要替换的部分模式包围起来,并使用“\数字”的方式引用分组,其中数字表示分组的序号。
    • 提取分组:使用括号将要提取的部分模式包围起来,将匹配到的内容提取出来。
  3. 分组序号:每个分组都有一个唯一的序号,从左向右以左括号的顺序进行标记,从 1 开始计数。

  4. 分组引用:可以使用“\数字”的方式引用分组,其中数字表示分组的序号。例如要替换分组1的内容,可以使用 \1 来引用分组1的内容。

  5. 命名分组:可以给分组指定一个名称,方便引用。命名分组使用语法 (?Ppattern) 进行定义,其中 name 为分组名称,pattern 为模式。

  6. 分组修饰符:可以在分组中使用修饰符进行特定的操作。

    • ?: 在分组中加入 ?: 前缀,表示非捕获分组,不会保留此分组的匹配结果。
    • ?= 在分组中加入 ?= 前缀,表示正向肯定预查,只匹配文本中满足预查条件的内容。
    • ?! 在分组中加入 ?! 前缀,表示正向否定预查,只匹配文本中不满足预查条件的内容。
  7. 分组示例:

import re# 匹配分组示例
pattern = r"(dog|cat)"
text = "I have a dog and a cat"
result = re.findall(pattern, text)
print(result)  # ['dog', 'cat']# 替换分组示例
pattern = r"(\d+)-(\d+)-(\d+)"
text = "Today is 2021-01-01"
result = re.sub(pattern, r"\3/\2/\1", text)
print(result)  # Today is 01/01/2021# 提取分组示例
pattern = r"(\d+)-(\d+)-(\d+)"
text = "Today is 2021-01-01"
result = re.search(pattern, text)
if result:year = result.group(1)month = result.group(2)day = result.group(3)print(year, month, day)  # 2021 01 01

以上是关于Python正则表达式分组概念与用法的详解。分组可以使正则表达式更加灵活和方便,能够处理更复杂的匹配、替换和提取需求。

findall() 与finditer() 方法
在Python中,findall()finditer()都是正则表达式模块re的方法,用于匹配字符串并返回匹配结果。

区别:

  • findall():该方法会返回所有匹配的字符串列表,每个匹配的字符串作为列表的一个元素。如果正则表达式中包含分组,则返回的是所有分组的元组。
  • finditer():该方法返回的是一个迭代器对象,使用迭代器可以逐个访问每个匹配的匹配对象。每个匹配对象包含匹配的字符串以及其他相关信息,如起始位置和结束位置等。

具体用法举例:

import re# 定义待匹配的字符串
text = 'hello world, hello python, hello regex'# 使用findall()方法匹配所有的hello开头的单词
result_findall = re.findall(r'hello\w+', text)
print(result_findall)  # ['hello', 'hello', 'hello']# 使用finditer()方法匹配所有的hello开头的单词
result_finditer = re.finditer(r'hello\w+', text)
for match in result_finditer:print(match.group())  # hello, hello, hello

注意,findall()方法返回的是一个列表,而finditer()方法返回的是一个迭代器对象,需要通过循环逐个获取匹配结果。如果只对匹配结果进行遍历,使用finditer()方法可以降低内存消耗。

re.sub() 与re.subn() 区别与举例
sub()方法用于替换字符串中的匹配项,可以指定替换的次数。示例如下:

import re# 替换匹配的字符为指定字符串
text = "Hello, my name is Alice."
new_text = re.sub(r"Alice", "Bob", text)
print(new_text)
# Output: Hello, my name is Bob.# 替换所有匹配的字符为指定字符串
text = "Hello, my name is Alice. Alice is my friend."
new_text = re.sub(r"Alice", "Bob", text)
print(new_text)
# Output: Hello, my name is Bob. Bob is my friend.# 限制替换次数
text = "Hello, my name is Alice. Alice is my friend."
new_text = re.sub(r"Alice", "Bob", text, count=1)
print(new_text)
# Output: Hello, my name is Bob. Alice is my friend.

subn()方法与sub()方法功能相同,但返回一个元组,包含新字符串和替换次数。示例如下:

import retext = "Hello, my name is Alice. Alice is my friend."
new_text, count = re.subn(r"Alice", "Bob", text)
print(new_text)
# Output: Hello, my name is Bob. Bob is my friend.
print(count)
# Output: 2

在上面的示例中,subn()方法返回的count为2,表示共进行了两次替换。

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

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

相关文章

C语言课程设计

内容与设计思想 1、系统功能与分析&#xff08;填写你所设计的菜单及流程图&#xff09;。 菜单&#xff1a; 日历打印 日历推算 日历间隔倒计时牌 退出程序 模块设计 根据功能需要&#xff1a; 源文件&#xff1a; #include<stdio.h> #include&…

采样率越高噪声越大?

ADC采样率指的是模拟到数字转换器&#xff08;ADC&#xff09;对模拟信号进行采样的速率。在数字信号处理系统中&#xff0c;模拟信号首先通过ADC转换为数字形式&#xff0c;以便计算机或其他数字设备能够处理它们。 ADC采样率通常以每秒采样的次数来表示&#xff0c;单位为赫…

用Pandas轻松进行7项基本数据检查

大家好&#xff0c;作为一名数据工程师&#xff0c;面对糟糕的数据质量&#xff0c;可以使用Pandas执行快捷的数据质量检查。本文使用scikit-learn提供的California Housing数据集&#xff0c;进行基本数据检查。 一、California Housing数据集概述 【数据集】&#xff1a; …

【管理运筹学】背诵手册(七)| 网络计划与排队论

七、网络计划 网络图中的第一个事项称为起始事项&#xff0c;它只表示整个任务的开始&#xff1b;而最后一个事项称为终止事项&#xff0c;它只表示整个任务的结束&#xff1b;介于起始事项和终止事项之间的所有事项都称为中间事项&#xff0c;它既表示前项工作的结束&#xf…

智能优化算法应用:基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定5.算…

智能优化算法应用:基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定5.算…

Python 作业答疑_6.15~6.18

一、Python 一班 1. 比较字符串 1.1 问题描述 比较两个字符串A和B&#xff0c;字符串A和B中的字符都是大写字母&#xff0c;确定A中是否包含B中所有的字符。 1.2 问题示例 例如&#xff0c;给出A"ABCD"&#xff0c;B"ACD"&#xff0c;返回True&#x…

硬件基础:差模和共模

一直以来&#xff0c;都难以理解差模和共模这两个概念&#xff0c;什么差分信号、差模信号、共模信号&#xff0c;差模干扰、共模干扰……虽然看了一些资料&#xff0c;但貌似说法还挺多的&#xff0c;理解起来仍然是一头雾水。所以&#xff0c;专门用一篇文章来好好研究下这个…

结构体对齐和补齐

结构体的对齐和补齐的规则&#xff1a; 对齐&#xff1a;假定从零地址开始&#xff0c;每成员的起始地址编号&#xff0c;必须是它本身字节数的整数倍。 补齐&#xff1a;结构的总字节数必须是它最大成员的整数倍。 注意&#xff1a;在Linux系统下计算补齐、对齐时&#xff0c;…

算法学习系列(六):高精度加法、减法、乘法、除法

目录 引言一、高精度加法1.题目描述2.代码实现3.测试 二、高精度减法1.题目描述2.代码实现3.测试 三、高精度乘法1.题目描述2.代码实现3.测试 四、高精度除法1.题目描述2.代码实现3.测试 引言 本文介绍了高精度加法、高精度减法、高精度乘法、高精度除法&#xff0c;这个高精度…

软件开发自动化到智能文档检索:大语言模型驱动的开源项目盘点 | 开源专题 No.46

shroominic/codeinterpreter-api Stars: 2.4k License: MIT 这是一个 ChatGPT 代码解释器的开源实现项目&#xff0c;使用了 LangChain 和 CodeBoxes 进行后端沙盒式 Python 代码执行。该项目具有以下特性和优势&#xff1a; 数据集分析、股票图表绘制、图像处理等功能支持网…

KubeSphere Marketpalce 上新!Databend Playground 助力快速启动数据分析环境

12 月 5 日&#xff0c;Databend Labs 旗下 Databend Playground&#xff08;社区尝鲜版&#xff09;成功上架青云科技旗下 KubeSphere Marketplace 云原生应用扩展市场&#xff0c;为用户提供一个快速学习和验证 Databend 解决方案的实验环境。 关于 Databend Playground Dat…

Flask之手搓bootstrap翻页

使用bootstrap框架的翻页组件时&#xff0c;记起在学习使用laravel框架的时候&#xff0c;只需要添加相应的功能代码&#xff0c;就可以直接使用翻页组件了&#xff0c;但缺少自定义&#xff0c;或者说自定义起来有点麻烦。 自己手搓翻页组件&#xff0c;不仅能加深对flask的认…

Java架构师系统架构设计服务拆分应用

目录 1 概论2 微服务应用的分层架构-阿里系应用内部模块分层3 如何从不同维度对服务进行拆分4【案例分析】阿里新零售业务的微服务拆分5 如何理解微服务的无状态化6 如何通过接口版本控制实现向后兼容7 可用性的保障手段-流量整形8 如何设计网关层限流和分布式限流9 EDA事件驱动…

STM32基础教程 p18 UART通信协议基础知识

1 UART通信协议简介 UART通信协议详细介绍 1.1 串行通信的简介 1. 单工通信&#xff1a;学校广播 2. 半双工通信&#xff1a;对讲机 3. 全双工通信&#xff1a;手机打电话 UART:通用的同步异步收发器 1.1.1 同步通信 组成&#xff1a;数据线、时钟线、偏选信号线 收发双方…

从文字到使用,一文读懂Kafka服务使用

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

大数据在互联网营销中的应用:案例与策略

互联网时代的营销领域正经历着一场由大数据驱动的变革。在2023年&#xff0c;大数据的应用已成为推动市场策略和决策的关键因素。本文将探讨大数据如何影响互联网营销&#xff0c;并通过实际案例分析展示其在提升营销效果方面的作用。 首先&#xff0c;通过分析海量数据&#x…

NumSharp

github地址&#xff1a;https://github.com/SciSharp/NumSharp High Performance Computation for N-D Tensors in .NET, similar API to NumPy. NumSharp (NS) is a NumPy port to C# targetting .NET Standard. NumSharp is the fundamental package needed for scientific …

第二十一章——网络通信

一.网络程序设计基础 1.局域网与互联网 2.网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。 1.1 TCP/IP层次结构 2.TCP与UDP协议 TCP可保证数据从一端送至另一端时&#xff0c;能够确实送达&#xff0c;而且抵达的数据的排列顺序和送出时的顺序相…

设备间的指令通信

指令通信的概念 要进行设备和设备之间的交流就需要通过串口发送数据进行交流 而串口发送简单的数据只需要传输介质 但是要发送复杂的数据就需要介质和传输的规则了 三种应用场景 比如在上位机和mcu之间 通过上位机管理控制器 从而控制电池 单片机和单片机之间 用户输入数据到…