正则表达式(Regular Exprerssion)in Python

        之前帮一位朋友面大模型微调实习岗位的时候,人家面试官考到了正则表达式,感觉这块知识还是挺重要的,所以浅浅的学习一下,每个小部分的代码在后面

目录

0.先从一个案例入手(提取文本中的电子邮件地址)

      代码实现:

1.为什么正则表达式?

        2.基本语法

普通字符:

元字符:

字符类:

预定义字符类:

重复限定符:

分组和捕获:

特殊字符:

代码实现:


参考学习一个国外博主的链接:

参考

0.先从一个案例入手(提取文本中的电子邮件地址)

      代码实现:

        

import re# 示例文本
text = """
Contact us at support@example.com for any inquiries.
You can also reach out to sales@company.com for business opportunities.
"""# 正则表达式模式
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'# 使用正则表达式查找所有匹配项
matches = re.findall(pattern, text)# 打印匹配的电子邮件地址
for match in matches:print(match)

在这个例子中,正则表达式的模式解释如下:

  • \b\b:表示单词的边界,确保我们匹配整个电子邮件地址而不是它的一部分。
  • [A-Za-z0-9._%+-]+:匹配电子邮件地址的用户名部分,包括字母、数字以及一些特殊字符。
  • @:匹配电子邮件地址中的 "@" 符号。
  • [A-Za-z0-9.-]+:匹配邮件服务器的域名部分,包括字母、数字以及一些特殊字符。
  • \.:匹配邮件服务器域名和顶级域之间的点号。
  • [A-Z|a-z]{2,}:匹配顶级域,至少包括两个字母。

1.为什么正则表达式?

                处理文本任务的时候,要能过滤出同种格式的信息,让同一块代码做相同的事情,use regular expressions to find and retrieve patterns in text 其实就是模式的概念,匹配或者查找字符串中的模式。

        2.基本语法

  1. 普通字符:

    • 普通字符表示它们自身,例如字母、数字和大多数标点符号。
  2. 元字符:

    • .:匹配除换行符之外的任意字符。
    • ^:匹配字符串的开始。
    • $:匹配字符串的结束。
    • *:匹配前面的字符零次或多次。
    • +:匹配前面的字符一次或多次。
    • ?:匹配前面的字符零次或一次。
    • \:转义字符,用于匹配元字符本身。
  3. 字符类:

    • [...]:字符类,匹配方括号中的任意字符。
    • [^...]:否定字符类,匹配不在方括号中的任意字符。
  4. 预定义字符类:

    • \d:匹配任意数字,相当于 [0-9]
    • \D:匹配任意非数字。
    • \w:匹配任意字母、数字、下划线,相当于 [a-zA-Z0-9_]
    • \W:匹配任意非字母、数字、下划线。
    • \s:匹配任意空白字符,包括空格、制表符、换行符。
    • \S:匹配任意非空白字符。
  5. 重复限定符:

    • {n}:匹配前面的字符恰好 n 次。
    • {n,}:匹配前面的字符至少 n 次。
    • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
  6. 分组和捕获:

    • ():将其中的表达式分组,并创建捕获组。
  7. 特殊字符:

    • \b:匹配单词的边界。
    • \B:匹配非单词边界。

代码实现:

1.普通字符:

普通字符表示它们自身,不需要特殊符号。

import retext = "This is a simple example."# 匹配 "simple"
pattern = re.compile(r'simple')
result = pattern.search(text)
print(result.group())

输出:simple

2.元字符:

  • .:匹配除换行符之外的任意字符。
import retext = "abc123"# 匹配任意字符后跟数字
pattern = re.compile(r'.\d')
result = pattern.search(text)
print(result.group())

·^:匹配字符串的开始。

import retext = "start with this"# 匹配以 "start" 开始的字符串
pattern = re.compile(r'^start')
result = pattern.search(text)
print(result.group())

·$:匹配字符串的结束。

import retext = "end with this"# 匹配以 "this" 结束的字符串
pattern = re.compile(r'this$')
result = pattern.search(text)
print(result.group())

 *:匹配前面的字符零次或多次

import retext = "ab"# 匹配 "a" 后跟零次或多次的 "b"
pattern = re.compile(r'ab*')
result = pattern.match(text)
print(result.group())

+:匹配前面的字符一次或多次。

import retext = "ab"# 匹配 "a" 后跟一次或多次的 "b"
pattern = re.compile(r'ab+')
result = pattern.match(text)
print(result.group())

 ?:匹配前面的字符零次或一次。

import retext1 = "ab"
text2 = "abb"# 匹配 "a" 后跟零次或一次的 "b"
pattern = re.compile(r'ab?')
result1 = pattern.match(text1)
result2 = pattern.match(text2)
print(result1.group(), result2.group())

\:转义字符,用于匹配元字符本身。

import retext = "The cost is $10."# 匹配 "$" 符号
pattern = re.compile(r'\$')
result = pattern.search(text)
print(result.group())

字符类:

  • [...]:字符类,匹配方括号中的任意字符。
  • [^...]:否定字符类,匹配不在方括号中的任意字符。
import retext = "The cat and the hat."# 匹配 "cat" 或 "hat"
pattern = re.compile(r'[ch]at')
result = pattern.search(text)
print(result.group())# 匹配不含 "c" 或 "h" 的字符
pattern = re.compile(r'[^ch]')
result = pattern.findall(text)
print(result)

预定义字符类:

  • \d:匹配任意数字,相当于 [0-9]
  • \D:匹配任意非数字。
  • \w:匹配任意字母、数字、下划线,相当于 [a-zA-Z0-9_]
  • \W:匹配任意非字母、数字、下划线。
  • \s:匹配任意空白字符,包括空格、制表符、换行符。
  • \S:匹配任意非空白字符。
import retext = "The price is $20."# 匹配数字
pattern = re.compile(r'\d+')
result = pattern.search(text)
print(result.group())# 匹配非数字
pattern = re.compile(r'\D+')
result = pattern.search(text)
print(result.group())text2 = "user_name123"# 匹配字母、数字、下划线
pattern2 = re.compile(r'\w+')
result2 = pattern2.match(text2)
print(result2.group())text = "Special characters: #@!"# 匹配非字母、数字、下划线
pattern = re.compile(r'\W+')
result = pattern.match(text)
print(result.group())
text = "This is a text with spaces."# 匹配空白字符
pattern = re.compile(r'\s+')
result = pattern.split(text)
print(result)# 匹配非空白字符
pattern = re.compile(r'\S+')
result = pattern.findall(text)
print(result)

       

重复限定符:

  • {n}:匹配前面的字符恰好 n 次。
  • text = "xxy"# 匹配 "x" 重复两次
    pattern = re.compile(r'x{2}')
    result = pattern.search(text)
    print(result.group())
    
  • {n,}:匹配前面的字符至少 n 次。
text = "xxxy"# 匹配 "x" 至少两次
pattern = re.compile(r'x{2,}')
result = pattern.search(text)
print(result.group())
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
text = "xxxy"# 匹配 "x" 至少两次,但不超过三次
pattern = re.compile(r'x{2,3}')
result = pattern.search(text)
print(result.group())

                

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

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

相关文章

qt 5.15.2压缩和解压缩功能

qt 5.15.2压缩和解压缩功能 主要是添加qt项目文件.pro内容: 这里要先下载quazip的c项目先编译后引入到本项目中/zip目录下 INCLUDEPATH ./zip CONFIG(debug, debug|release) {win32:win32-g: PRE_TARGETDEPS $$PWD/zip/libquazipd.awin32:win32-g: LIBS -L$$PWD…

基于Netty的网络调用实现

作为一个分布式消息队列,通信的质量至关重要。基于TCP协议和Socket实现一个高效、稳定的通信程序并不容易,有很多大大小小的“坑”等待着经验不足的开发者。RocketMQ选择不重复发明轮子,基于Netty库来实现底层的通信功能。 1 Netty介绍 Net…

Python如何优雅的写包——Packages

Python中的函数(Function)、类(Class)、模块(Module)、包库(Package),都是为了实现模块化引用,让程序的组织更清晰有条理。 通常,函数、变量、类存储在被称为模块(Module)的.py文件中,一组模块文件又组成了包(Package)。将函数、…

【pytorch】深度学习入门一:pytorch的安装与配置(Windows版)

请支持原创,认准DannisTang(tangweixuan1995foxmail.com) 文章目录 第〇章 阅读前提示第一章 准备工作第一节 Python下载第二节 Python安装第三节 Python配置第四节 Pycharm下载第五节 Pycharm安装第六节 CUDA的安装 第二章 Anaconda安装与配…

Gitee 之初体验(上)

我们在项目开发或者自己学习的时候,总会存在这样的问题: 在一台电脑上编写完代码,想要再另外一台电脑上再去写,再或者和其他人一起协作等等场合,代码传来传去很麻烦。 这个时候,我们就可以去使用代码管理工…

LeetCode刷题---打家劫舍问题

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、打家劫舍 题目链接:打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定…

Spring Security 6.x 系列(7)—— 源码分析之建造者模式

一、建造者模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者,把他们放到一起看看他们的共同特点: 查看AuthenticationManagerBuilder的继承结构图: 查看HttpSecurity的继承结构图: 查看WebSec…

在线html地址转html文本

可用于在线协议配置 页面展示 <div v-html"docHtml" />html文本获取 function downloadDoc(url) {// const load this.openInvLoading()let req false// Safari, Firefox, 及其他非微软浏览器if (window.XMLHttpRequest) {try {req new XMLHttpRequest()…

数据结构(超详细讲解!!)第二十六节 图(上)

1.基本概念 图&#xff08;Graph&#xff09;是一种较线性表和树更为复杂的非线性结构。是对结点的前趋和后继个数不加限制的数据结构&#xff0c;用来描述元素之间“多对多”的关系(即结点之间的关系是任意的)。 一个图G &#xff08;V&#xff0c;E&#xff09;由顶点&…

excel 计算断面水质等级

在工作中遇到根据水质监测结果要判断断面等级。写了下面的公式&#xff1a; 因子标准值 limits {COD: [15,15, 20, 15,20],氨氮: [0.15, 0.5, 1, 1.5, 2.0],总磷: [0.02, 0.1, 0.2, 0.3, 0.4] } excel公式&#xff1a; IFS(MAX(IF(M2>20,1,0), IF(N2>2,1,0), IF(O2&g…

RabbitMQ登录控制台显示--你与此网站的连接不是私密连接

一、RabbitMQ默认账号 Note: The default administrator username and password are guest and guest. 注:默认管理员用户名和密码为guest和guest 二、自己修改过或者注册的情况 由于本人之前用过,注册过账号密码,在登录时,用户名账号有异常出现以下问题 解决方案: 因为我的rab…

AI - Steering behaviorsII(碰撞避免,跟随)

Steering Behaviors系统中的碰撞避免&#xff0c;路径跟随&#xff0c;队长跟随 Collision Avoid 在物体前进的方向&#xff0c;延伸一定长度的向量进行检测。相当于物体对前方一定可使范围进行检测障碍物的碰撞 延伸的向量与碰撞物圆心的距离小于碰撞物的半径&#xff0c;则…

计算机体系结构----流水线技术(三)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----计算机系统结构教程(第二版)张晨曦等 计算机体系结构----流水线技术&#xff08;三&#xff09; 3.1 流水线的基本概念3.1.1 什么是流水线3.1.2 流水线的分类1. 部件级流水线、处理机级流…

您的计算机已被.Elbie勒索病毒感染?恢复您的数据的方法在这里!

引言&#xff1a; 在数字世界里&#xff0c;.Elbie勒索病毒如同一位隐匿的黑帮成员&#xff0c;以其狡猾而毁灭性的手段频频露面。我们将深入探讨.Elbie的狡诈行径&#xff0c;教你如何在被其加密的数据中找回丢失的珍贵文件&#xff0c;并揭示如何巧妙规避这场数字陷阱。数据…

C语言之结构体详解

C语言之结构体详解 文章目录 C语言之结构体详解1. 结构体类型的声明2. 结构体变量的创建和初始化3. 结构体的特殊声明4. 结构体的自引用结构体的自引用匿名结构体的自引用 5. 结构体内存对齐5.1 练习一5.2 练习三 6. 为什么存在内存对⻬? 1. 结构体类型的声明 struct tag {me…

MySQL电商管理系统练习题及答案

一 、表结构 用户表(user)&#xff1a;id(主键)、username、password、email、phone、age商品表(product)&#xff1a;id(主键)、name、price、stock、description订单表(order)&#xff1a;id(主键)、user_id(外键&#xff0c;关联用户表)、total_price、status、create_time…

05_属性描述符

05_属性描述符 文章目录 05_属性描述符一、属性描述符是什么&#xff1f;二、属性描述符①&#xff1a;查看属性描述②&#xff1a;设置属性描述符③&#xff1a;案例01.代码实现02.代码实现&#xff08;优化&#xff09; 一、属性描述符是什么&#xff1f; 属性描述符的结构 在…

类和对象——(3)再识对象

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 你说那里有你的梦想&#xff0c;…

MySQL官网推荐书籍

MySQL官网推荐书籍 图片有防盗链csdn转存失败。有图版传送门MySQL官网推荐书籍 高效的MySQL性能&#xff1a;Daniel Nichter的最佳实践和技术 Daniel Nichter 向您展示了如何应用直接影响 MySQL 性能的最佳实践和技术。您将学习如何通过分析查询执行、为常见 SQL 子句和表联接…

KMP基础架构

前言 Kotlin可以用来开发全栈, 我们所熟悉的各个端几乎都支持(除了鸿蒙) 而我们要开发好KMP项目需要一个好的基础架构,这样不仅代码更清晰,而且能共享更多的代码 正文 我们可以先将KMP分为前端和服务端 它们两端也能共享一些代码,比如接口声明,bean类,基础工具类等 前端和…