原理介绍_正则表达式

news/2025/1/1 12:19:44/

文章目录

  • 元字符
  • 反义
  • 其它符号
  • 贪婪和懒惰模式
  • 常用示例
    • 1. 不匹配
  • 辅助工具
  • 教程

元字符

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

符号作用示例
.匹配任意单个字符例如1.3可能是1后面跟任意字符,再跟3
^匹配字符串首例如^12可能是123,但不能是312
$配字符串尾例如12$可以是可以312,当不能是123
[]匹配括号内输入的任意字符[123]可以为1,2或3
*匹配任意数量的前导字符例如1*2可以为任意数量1(甚至没有),后面跟一个2
+匹配至少一个前导字符例如1+2必须为一个或多个1,后跟一个2
?匹配一个前导字符或为空例如1?2可以为2或这12
\w
\W
匹配包括下划线的任何单词字符
匹配任何非单词字符
\w类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集
\W等价于“[^A-Za-z0-9_]”
\d
\D
匹配一个数字字符。
匹配一个非数字字符
等价于[0-9]
等价于[^0-9]
\s
\S
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\S匹配不包含空白符的字符串
\b
\B
\b匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
\B匹配任意不是空白符的字符
例如,“\bend\b” 在匹配 “weekend,endfor,end” 时,能匹配"end",无法匹配weekend和endfor

反义

表达式作用示例
[^x]
[^abc]
匹配不包含x的任意字符
匹配不包含abc的任意字符

其它符号

符号作用示例
( )子表达式(即用小括号括起来指定子表达式,也叫做分组)例如(/d{4}) | (/d{6}) 匹配长度为4或者6位数的数字
|分支条件(类似“或”的作用)例如(/d{4}) | (/d{6}) 匹配长度为4或者6位数的数字
{n}n是一个非负整数。匹配确定的n次例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o
{n,}n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m}m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次例如,“o{2,3}”将匹配“hjk23kkkk”中kkkk中的前3个

贪婪和懒惰模式

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,考虑这个表达式:a.b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.
?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

  • 懒惰限定符
符号作用示例
*?重复任意次,但尽可能少重复例如a.*?b 匹配aabab中的aab和最后的ab
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

常用示例

1. 不匹配

功能示例测试字符串备注
匹配不以字符串Livy开头的字符串^(?!Livy).*1. (?!E) :这是个断言
2. (?!E) : 表达式后面紧跟着E才能匹配。例如,const(?=char)匹配“const”且其后必须有"char"
匹配不以字符串Livy或Hassan开头的字符串^((?!Livy)(?!Hassan).*)$同上
匹配不以字符串Livy或Hassan开头、并以.zip字符串结尾的字符串^((?!Livy)(?!Hassan).*)(.zip)$LIvy_Eng_V1.000.00018.zip
Hassan_Eng000000.1.R.221118.zip
DH_Eng_0.0000000.18.zip
DH_Eng_0.00001118.zip
DH_En00.0000000.1.x118.zip
DH_X_En0.0000021118.zip
DH_En000.0000000.1.r.221118.zi
Eng_Hassan_00021118.zip
同上

辅助工具

软件:RegexBuddy

菜鸟教程——正则表达式在线测试

教程

原理介绍


http://www.ppmy.cn/news/314496.html

相关文章

b'\xe5\x8f\x98\xe6\x80\x81'

>>>变态.encode(utf-8) b\xe5\x8f\x98\xe6\x80\x81 >>> print(b\xe5\x8f\x98\xe6\x80\x81.decode(utf-8)) 变态

xorg

导航 (返回顶部) 1. xorg概述2. 只安装必要 2.1 基础包:xorg-server,xorg-xinit2.2 显卡驱动:xf86-video-intel2.3 输入设备:xf86-input-libinput2.4 小结 3. group4. gentoo相关链接5. Graphical user interface 图形用户界面概述 1. xorg概述 2. 只安装必要2.1 基础包:xorg-…

12.18

在object类中 tostring 直接打印对象的额名字 就是调用对象的tostring方法。。p p.tostring 直接打印对象的地址值没有意义&#xff0c;所以需要重写object类的tostring方法&#xff0c;打印对象的属性&#xff08;name.age&#xff09; voerride public string tostring&a…

X11 linux配置和windows配置

LINUX部分 &#xff08;服务器需要有ssh功能安装apt-get install openssh-server 卸载apt-get remove openssh-server&#xff09; 1、linux编辑/etc/ssh/sshd_config 文件&#xff0c;激活X11转发。 X11Forwarding yes 需要重启&#xff08;service ssh restart&#xff09; …

一种基于卷积神经网络的数据驱动故障预测方法(含代码)

本文以CWRU轴承故障的振动信号数据库作为模型的训练集和测试集 并根据现有论文的思路和模型框架&#xff0c;用pytorch复现了论文的模型结构和性能&#xff0c;在二分类问题中准确率高达100% 本文在理论方面不再过多赘述&#xff0c;详细可看博主之前的博客或观看论文原文 数…

【Linux开发】关于X11

X-Window&#xff08;维基百科&#xff1a;https://en.wikipedia.org/wiki/X_Window_System&#xff09;是一个窗口系统&#xff0c;采用的是server-client架构&#xff0c;分为两个部分x-server和x-client&#xff0c;其中x-server其能够直接操作硬件显示器&#xff0c;而x-cl…

交通状态分析 | Python实现基于张量分解的交通流量时空模式挖掘

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 交通状态分析 | Python实现基于张量分解的交通流量时空模式挖掘 研究内容 一般出行行程通常都由某种明确目的驱使,例如上班、购物或娱乐,出行的起始区域因其承担功能的不同,通常能够反映出用户的出行目…

凯斯西储大学轴承数据集批量处理方法

看前面关于CWRU数据的博客&#xff0c;大家讨论的如此热烈&#xff0c;这里我就再分享一个可以批量处理凯斯西储大学轴承数据的方法&#xff08;MATLAB实现&#xff09;&#xff01; 经过整理&#xff0c;官网上的数据大概如下&#xff1a; 其中每个文件夹均有各自状态下的数据…