你需要了解的正则表达式相关知识

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于匹配字符串的模式。它广泛应用于文本查找、替换、验证等场景,尤其是在数据处理、网络爬虫、编程等领域非常有用。下面将详细介绍正则表达式的基本语法、常用元字符及操作符、分组与捕获等核心概念。

在这里插入图片描述

1. 基本结构与符号

元字符(Meta Characters)

正则表达式中的元字符有特殊含义,用于构建匹配模式。常用元字符如下:

元字符含义示例匹配结果
.匹配除换行符以外的任意字符a.b“acb”, “a5b”
^匹配字符串开头^hello“hello world”
$匹配字符串结尾world$“hello world”
*匹配前面的字符零次或多次ab*“a”, “ab”, “abbb”
+匹配前面的字符一次或多次ab+“ab”, “abbb”
?匹配前面的字符零次或一次ab?“a”, “ab”
{n}匹配前面的字符 n 次a{3}“aaa”
{n,m}匹配前面的字符 n 到 m 次a{2,4}“aa”, “aaa”, “aaaa”
[]字符集,匹配其中任意一个字符[abc]“a”, “b”, “c”
``或运算,匹配左右表达式任意一个`a
\转义字符,取消元字符的特殊含义.“.”
特殊字符集

一些特殊字符集用于简化匹配模式:

字符含义示例匹配结果
\d匹配任意数字 [0-9]\d“0”, “9”, “123”
\D匹配任意非数字\D“a”, “-”, " "
\w匹配字母、数字、下划线\w“a”, “1”, “_”
\W匹配非字母、数字、下划线\W“!”, " "
\s匹配空白字符(空格、制表符等)\s" ", “\t”, “\n”
\S匹配非空白字符\S“a”, “1”, “#”

2. 常见操作符

操作符含义
*零次或多次匹配
+一次或多次匹配
?零次或一次匹配
{n}精确匹配 n 次
{n,}至少匹配 n 次
{n,m}匹配 n 到 m 次
()分组和捕获
(?:…)非捕获组,不保存匹配结果
(?=…)正向预查,匹配后面为指定内容的情况
(?!..)负向预查,匹配后面不为指定内容的情况

3. 分组与捕获

分组(Group)用于将匹配结果分成多个部分,而捕获组可以保存匹配结果,方便后续处理。

  • 捕获组:使用小括号 (),会保存匹配结果。
  • 非捕获组:使用 (?:…),不会保存匹配结果,仅用于匹配。
    例如,正则 (\d{3})-(\d{3,4})-(\d{4}) 可以匹配并捕获电话号码,如 123-456-7890。分组后可以分别提取区号、主号码等。

4. 常见应用场景示例

(1) 匹配电子邮件地址
^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,6}$
  • 解释:+:以字母、数字、下划线、点、减号开头,出现一次或多次。@:匹配 @ 符号。[a-zA-Z\d.-]+:域名部分。.[a-zA-Z]{2,6}$:匹配顶级域名(如 .com, .org)。
(2) 匹配网址(URL)
^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}\/?$
  • 解释:^https?:匹配 http 或 https。😕/:匹配 😕/。(www.)?:匹配可选的 www.。[a-zA-Z0-9-]+.[a-zA-Z]{2,6}:匹配主域名和顶级域名。/?$:可选的结尾斜杠。

5. 编程示例(Python)

在 Python 中,可以使用 re 模块处理正则表达式。

import re

# 匹配邮件地址
email_regex = r"^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,6}$"
email = "example@example.com"
if re.match(email_regex, email):
    print("匹配成功:是一个有效的邮箱地址")

# 匹配电话号码
phone_regex = r"(\d{3})-(\d{3,4})-(\d{4})"
phone = "123-456-7890"
match = re.match(phone_regex, phone)
if match:
    print(f"区号: {match.group(1)}, 主号: {match.group(2)}, 尾号: {match.group(3)}")

总结

正则表达式可以高效地匹配复杂字符串模式,但需要精确地定义匹配规则。熟练掌握正则表达式需要理解各种元字符、操作符及分组的作用,并在实际应用中不断练习。

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

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

相关文章

掌握分布式系统的38个核心概念

天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢? 1. 架构设计 这一节将从一些经典的开源系统架…

【C++进阶】智能指针的使用和原理(2)

5. shared_ptr和weak_ptr 5.1 shared_ptr循环引用问题 shared_ptr大多数情况下管理资源⾮常合适,⽀持RAII,也⽀持拷贝。但是在循环引⽤的场景下会导致资源没得到释放内存泄漏,所以我们要认识循环引用的场景和资源没释放的原因,并…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,或者是第三方公司提供的是Android的库,这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种,Module模…

linux进程的状态之环境变量

我们在前面了解了进程的状态及相关概念 接下来我们接着上一篇进程的状态接着了解环境变量 进程的状态 文章目录 目录 文章目录 前言 二、环境变量 1、常见环境变量 2、查看环境变量 3、修改PATH 4、HOME 5、PATH ​编辑 6、和环境变量相关的命令 三、环境变量的组织…

揭秘集装箱箱号自动识别原理,箱号识别算法

集装箱箱号自动识别算法是一种高效且实用的软件工具。它利用相机、手机或其他摄像头捕获集装箱箱号图像,并通过深度学习的OCR(光学字符识别)识别技术对集装箱号码进行准确识别。要想进行集装箱箱号识别,需要以下几个基本步骤&…

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。

2024-10-31,由清华大学和北京大学共同创建的AndroidLab数据集,为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架,这对于推动安卓代理技术的发展具有重要意义。 数据集地址:Android Instruct|A…

使用axois自定义基础路径,自动拼接前端服务器地址怎么办

请求路径: http://localhost:5173/http://pcapi-xiaotuxian-front-devtest.itheima.net/home/category/head 很明显多拼接了路径地址 查看基础路径文件发现: //axios基础封装 import axios from axiosconst httpInstance axios.create({baseURL: /h…

Densenet模型花卉图像分类

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

Pattern program MPAT 详解

本文为VIP文章,主要介绍Pattern中元素与格式、常用指令、地址&数据产生指令等。 目录 一、pattern概述 二:Pattern构成元素 1、pattern构成元素:MPAT、END 2、pattern构成元素:pattern file name 3、pattern构成元素:SDEF 4、Pattern构成元素:REGISETR 5、Pa…

【通义灵码】AI编码新时代

目录 一.初识灵码,开启新篇 安装 登录 二.灵码相伴,探索新境 实时续写 自然生成 单元测试生成 解释代码 优化建议 快捷键 三.智慧流转,高效开发 驱动移植 LVGL框架 项目总结 四.融合创新,携手同行 一.初识灵码&#…

RabbitMQ客户端应用开发实战

这一章节我们将快速完成RabbitMQ客户端基础功能的开发实战。 一、回顾RabbitMQ基础概念 这个RabbitMQ的核心组件,是进行应用开发的基础。 二、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持。这里我们只分析Java语言的客户端。 上一章节提…

PySide6百炼成真(2)

文章目录 1.简单的登录页面2.简单的计算器 本篇根据前面所学做两个小demo 制作一个简单的登录页面制作一个计算器 因为还没有学习布局流等,所以就只能拖拉到设计师中. 1.简单的登录页面 下面就到计算器了,在图形界面中计算器就跟我们编程语言的hello,world一样,所以一定要自己…

群控系统服务端开发模式-应用开发-上传工厂开发

现在的文件、图片等上传基本都在使用oss存储。而现在常用的oss存储有阿里云、腾讯云、七牛云、华为云等,但是用的最多的还是前三种。而我主要封装的是本地存储、阿里云存储、腾讯云存储、七牛云存储。废话不多说,直接上传设计图及说明,就一目…

服务器被病毒入侵如何彻底清除?

当服务器遭遇病毒入侵时,彻底清除病毒是确保系统安全和数据完整性的关键步骤。这一过程不仅需要技术上的精准操作,还需要严密的计划、合理的资源调配以及后续的防范措施。以下是一篇关于如何在服务器被病毒入侵时彻底清除病毒的详细指南。 一、初步响应与…

修改 title标题图标

路径 \web\views\webclient_templates.xml \web\static\src\webclient\webclient.js 再升级web模块

docker安装zookeeper,以及zk可视化界面介绍

1. zookeeper 1.1. zookeeper简单介绍 ZooKeeper 是一个分布式的开源协调服务,最初由 Apache Hadoop 项目开发,用于构建分布式应用程序。它提供了一个简单的接口,允许开发人员实现诸如配置维护、域名服务、分布式同步、组服务等常见任务。Z…

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。

idea配置maven仓库

下载Maven并配置文件内容 maven下载网址:Maven – Download Apache Maven 下载到D盘:D:\apache-maven-3.9.9 创建maven-repository文件夹作为本地仓库 修改conf文件夹下的setting.xml文件内容 在里面添加一条,指定本地仓库,下载…

L1G3000 提示工程(Prompt Engineering)

什么是Prompt(提示词)? Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。什么是提示工程? 提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。 六大基本原则: 指令要清晰提供参考内容复杂的任务拆…