【Python】正则

特殊字符转义

以下字符都需要用 反斜线(\)来进行特殊字符的转义。

\n - 换行符
\t - 制表符
\ - 反斜线本身
. - 点号(任意单个字符)
星号(0次或多次重复前面的元素)
加号(1次或多次重复前面的元素)
? - 问号(零次或一次重复前面的元素)
[] - 方括号内的任何字符集合
() - 分组操作符
{} - 花括号内指定数量的重复次数

起因,python正则匹配,从'你好aaa+'匹配‘aaa+’,我就想完整的匹配aaa+,但是实际效果是'你好a'这种的也能匹配上。

debug发现原来+在正则中是特殊字符。如果要匹配 + 字符本身,你需要使用反斜杠 \ 对它进行转义。即遇见 + 的pattern用 /+ 来替换,

modified_string = original_string.replace("+", "/+")

‘aaa+’被解释为:匹配前面的字符 'aaa' 一次或多次。

import rere.search('aaa+', 'a') # nonere.search('aaa+', 'aaab') # <_sre.SRE_Match object; span=(0, 3), match='aaa'>re.search('aaa+', 'ab') # nonere.search('aaa+', 'aab') # nonere.search('aaa+', 'aaaaaab')  # <_sre.SRE_Match object; span=(0, 6), match='aaaaaa'>

re.match() 与 re.search() 的区别

1. `re.match()`:
   - `re.match()` 用于从字符串的起始位置开始匹配正则表达式。
   - 如果匹配成功,`re.match()` 返回一个匹配对象;如果匹配失败,它返回 `None`。
   - 它只匹配字符串的第一个子串,也就是说,它不会扫描整个字符串,而是在找到第一个匹配项后停止。

2. `re.search()`:
   - `re.search()` 用于在字符串中扫描正则表达式,并返回第一个匹配项。
   - 如果匹配成功,`re.search()` 返回一个匹配对象;如果匹配失败,它返回 `None`。
   - 它会扫描整个字符串,直到找到第一个匹配项为止。

简而言之,`re.match()` 通常用于检查字符串的起始部分是否与正则表达式匹配,而 `re.search()` 用于在整个字符串中查找匹配项。下面是一个示例,展示这两个函数的区别:

总结:search()更符合需求。

import re# 示例字符串
text = "这是一个测试字符串,包含多个部分。"# 正则表达式
pattern1 = r'测试'
pattern2 = r'多个部分'# 使用re.match()
match1 = re.match(pattern1, text)
match2 = re.match(pattern2, text)print(f"match1: {match1}") # match1: None
print(f"match2: {match2}") # match2: None# 使用re.search()
search1 = re.search(pattern1, text)
search2 = re.search(pattern2, text)print(f"search1: {search1}") # search1: <_sre.SRE_Match object; span=(4, 6), match='测试'>
print(f"search2: {search2}") # search2: <_sre.SRE_Match object; span=(12, 16), match='多个部分'>

re.findall()

matches = re.findall(pattern, str)

re.sub()

# 将str中匹配到的pattern部分替换为''new_str = re.sub(pattern, '', str)

实践1:匹配12g

pattern = r"\d+\s*[Gg][Bb]?"  # 256g, 12g

实践2:匹配12g+12g, 12gb+12gb, 12g+1

pattern = r"\d+\s*[g]?[b]?\+\d+\s*[Gg]?[Bb]?"

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

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

相关文章

python入门必会的助手函数:dir()函数

今天我们来看一个非常重要的函数&#xff1a;dir() 中文说明&#xff1a;不带参数时&#xff0c;返回当前范围内的变量、方法和定义的类型列表&#xff1b;带参数时&#xff0c;返回参数的属性、方法列表。如果参数包含方法__dir__()&#xff0c;该方法将被调用。如果参数不包…

面试重点项

最近准备面试了&#xff0c;梳理一些面试经常考试的细节点,不然每次都要去整理&#xff0c;答案未给出。 一、C语言基础 1.1、字节对齐 link Struct和Union字节对齐的内存占用计算方法 link 怎么计算union和struct中字节数计算 1.2、union数据空间大小计算 link 怎么计算u…

IntelliJ IDEA 下载安装及配置使用教程

一、IDEA下载 1、打开游览器输入IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com) 2、点击Download&#xff0c;进入IDEA下载界面 3、 有两个版本&#xff0c;一个是Ultimate 版本为旗舰版&#xff0c;需要付费&#xff0c;包括完整的功能&#xff0c;下载后…

【JSON2WEB】08 Amis的事件和校验

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

部署DNS解析服务

一、安装软件&#xff0c;关闭防火墙&#xff0c;启动服务 1.yum install -y bind bind-utils bind-chroot 2.systemctl stop firewalld && setenforce 0 3.systemctl start named 二、工作目录 /var/named/chroot/etc #存放主配置文件 /var/named/chroot/var/n…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LongPressGesture)

用于触发长按手势事件&#xff0c;触发长按手势的最少手指数为1&#xff0c;最短长按时间为500毫秒。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 LongPressGesture(value?: { fingers?: num…

Vue3:OptionsAPI 与 CompositionAPI的比较

1、Vue2 Vue2的API设计是Options&#xff08;配置&#xff09;风格的。 Options API 的弊端 Options类型的 API&#xff0c;数据、方法、计算属性等&#xff0c;是分散在&#xff1a;data、methods、computed中的&#xff0c;若想新增或者修改一个需求&#xff0c;就需要分别…

【Leetcode每日一题】 前缀和 - 和为 K 的子数组(难度⭐)(29)

1. 题目解析 题目链接&#xff1a;560. 和为 K 的子数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给数组是否存在连续子数组和为指定值&#xff0c;存在返回连续子数组个数即可&#xff0c;不存在返回0即…

C++入门全集(5):内存管理

前言 一、内存区域划分 二、C的内存管理方式 2.1 对内置类型 2.2 对自定义类型 三、new和delete的底层实现 四、new和delete的原理 五、定位new 六、malloc/free和new/delete 前言 在C中&#xff0c;内存管理是不可避免的一门必修课。C对内存的自由度使其获得了更高的…

教你用Android Studio如何打jar包与aar包

目录 jar与aar区别 生成jar与aar前言 常规来说,我们项目接入第三方的SDK,是有以下两种方法的: 1.构建项目打包出Android原生工程,使用Android Studio在原生工程里面写接入第三方SDK的逻辑代码。 2.使用Android Studio创建工程,在工程里写接入第三方SDK的逻辑代码…

单片机的boot升级和双备份升级

同时boot升级还会有一个策略来防止单片机变成砖&#xff1a;就是boot的升级程序写在boot中&#xff0c;这个部分的的升级程序是不会改动的&#xff0c;如果检测到升级失败&#xff0c;会一直等待&#xff0c;直到升级正确的程序

Mac M2机器使用python3的lxml报错symbol not found in flat namespace

报错详情如下&#xff1a; ...... from lxml import etree ImportError: dlopen(/opt/miniconda3/envs/python38/lib/python3.8/site-packages/lxml/etree.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace _exsltDateXpathCtxtRegister 解决方法&…

Sora: 大型视觉模型背景、技术、局限性和机遇的综述

论文链接&#xff1a;https://arxiv.org/pdf/2402.17177.pdf 背景 在分析 Sora 之前&#xff0c;研究者首先盘点了视觉内容生成技术的沿袭。 在深度学习革命之前&#xff0c;传统的图像生成技术依赖于基于手工创建特征的纹理合成和纹理映射等方法。这些方法在生成复杂而生动…

全自动气象站的工作原理

TH-CQX5全自动气象站是一款野外高精度监测气象数据的环境气象站设备。它结合了先进的传感器技术、自动化控制系统和远程通信技术&#xff0c;能够提供准确、实时的气象数据&#xff0c;为环境保护、气象研究、农业生产等领域提供重要的数据支持。 高精度传感器&#xff1a;全自…

苹果电脑安装Android Studio和配置SDK

大家好&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;今天&#xff0c;我们要来聊一聊关于《苹果电脑安装Android Studio和配置SDK》这个话题。对于使用苹果电脑的开发者来说&#xff0c;安装Android Studio并配置SDK可能会有些不同&#xff0c;但只要跟着我的指引&#xf…

2024-3-5 python 序列小知识点

1、for循环的变量作用域不限于for循环内 >>>i 10 >>>for i in range(100): >>> print(i) >>> i 100此处&#xff0c;for循环里的 i 修改了之前的 i 变量的值。 2、列表推导式里的变量作用域仅限于推导式内 推导式犹如一个函数&…

五、布局布线约束、系统优化参数、时序优化收敛 关键技术点

在实际的工程当中&#xff0c;出现了时序违例的情况如何解决呢&#xff1f; 本章内容将介绍例外约束、布局布线的具体操作&#xff0c;实现系统参数的优化。 **前言:**通过约束时钟&#xff0c;比如基准时钟&#xff0c;和生成时钟&#xff0c;让我们的综合工具知道我们的时序…

嵌入式系统是什么?Linux应用开发是开发什么的?

第一篇&#xff1a; 原文链接&#xff1a;https://www.zhihu.com/question/464205608/answer/3358027187 一、什么是嵌入式系统 嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适用于应用系统&#xff0c;对功能、可靠性、…

Java开发人员应学习的10种工具

1.Docker Docker是一个开源工具&#xff0c;用于自动在云或物理服务器上部署应用程序。它允许开发人员和系统管理员在笔记本电脑&#xff0c;数据中心VM或云上构建&#xff0c;交付和运行分布式应用程序。 Docker与云&#xff0c;Linux和Windows供应商合作&#xff0c;并且许多…