正则表达式详细讲解篇

正则表达式详细讲解篇

正则表达式,简称为regex,是文本模式的描述方法。

Regular Expression,在代码中常简写为regex、regexp或RE等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。再用正常语言表达出来。

?,*,+,\d,\w 都是等价字符,它们修饰的是前面的匹配类型

?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,} ( 如\w+ 表示匹配一个或多个字母)
\d等价于[0-9],数字(10进制)
\D等价于[^0-9](除0-9的任意非数字字符)
\w等价于[A-Z a-z 0-9],(匹配任意字母以及数字)
\W等价于[^A-Za-z_0-9] (匹配除字母以及数字外的字符)
\s,空格;
\S非空格

常用运算符与表达式:
^ 开始
() 域段,也称为组
[] 包含,默认是一个字符长度,可用于建立自己的字符分类
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度 –一个域段部分包括了()以及后面的匹配长度
. 任何单个字符(. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
常用有用的表达式
[a-zA-Z0-9._%±] 用户名,大小写字母数字加点号后百分号加号或短横
, 分割(\d\d\d\d )与(\d){4}是等效的还是与(\d{4})等效呢?



1.Import re, 调用 re.compiler()括号里的内容都需是字串,显示为浅色

2.字符|称为“ 管道”。希望匹配许多表达式中的一个时, 就可以使用它。例如,
正则表达式 r’Batman|Tina Fey’将匹配’Batman’或’Tina Fey’。

3.匹配多样化
*, ?, +前面的括号都表示匹配它之前的分组括号或者是类型,表示如下
(UML表示法也是一种正则表示法):

  • 等价于{0,}
    ? 等价于{0,1}
  • 等价于{1,}
    如果需要待定次数,则到括号后用花括号
    (ha){3,4}表示将匹配’hahaha’,‘hahahaha’,3到4次

4.待匹配如果有空格

reg = re.compile('(ha){2,3}')
mo2=reg.search('youhahahahahaha')
mo2.group()

‘hahaha’–贪心法所以先取3个的,但

mo1=reg.search('you haha hahaha ha')
mo1.group()

‘haha’—第一次只有二个ha
compile的参数只能为 ’ ‘, r’ ‘,整个正则表达式都需要在内

5.用.点心匹配所有字符,如果要用它的非贪心模式则要用.?
Res = Re.compile(r’<.*?>‘)
Mo = res.search(‘for dinner>’)
Mo.group ‘’
例如我只需要括号里的内容,你就要用到点心了
但点心将匹配除换行外的所有字符,如需要匹配换行则加上 re.DOTALL参数

6.最常用类型
但缩写的字符分类( \d、 \w、 \s 等) 太宽泛。你可
以用方括号定义自己的字符分类。

自定义的部分可用,^表示非,(但不用 ) [ a b c ] 表 示 匹 配 非 a b c 的 字 符 部 分 。 但 一 般 条 件 可 用 和 )^[abc] 表示匹配非abc的字符部分。 但一般条件可用^和 [abc]abc,但是与自定义里的完全不同,它们表示以…开始和以…结束之意。
正则表达式 r’^Hello’匹配 以 ‘Hello’开始的字符串
正则表达式 r’\d$’匹配以数字 0 到 9 结束的字符串
正则表达式语法支持情况
括号用法小结:
小括号()表示创建分组。然后可用group()匹配对象方法
花括号{}表示分组匹配的次数
方括号[ ]表示任选,
^作用,方括号内表示取反,无方括号表示以…开头



本章介绍了许多表示法,所以这里快速复习一下学到的内容:
?匹配零次或一次前面的分组。
匹配零次或多次前面的分组。
+匹配一次或多次前面的分组。
{n}匹配n次前面的分组。
{n,}匹配n次或更多前面的分组。
{,m}匹配零次到m次前面的分组。
{n,m}匹配至少n次、至多m次前面的分组。
{n,m}?或
?或+?对前面的分组进行非贪心匹配。
^spam意味着字符串必须以spam开始。
spam$意味着字符串必须以spam结束。
,匹配所有字符,换行符除外。
\d、\w和\s分别匹配数字、单词和空格。
\D、\W和\S分别匹配出数字、单词和空格外的所有字符。
[abc]匹配方括号内的任意字符(诸如a、b或c),
[^abc]匹配不在方括号内的任意字符。



速记理解技巧
. [ ] ^ $
四个字符是所有语言都支持的正则表达式,所以这四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了:
等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9]。
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
分割语法:
[A,H,T,W] 包含A或H或T或W字母
[a,h,t,w] 包含a或h或t或w字母
[0,3,6,8] 包含0或3或6或8数字
语法与释义:
基础语法 “^([]{})([]{})([]{})$”
正则字符串 = “开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束”

?,,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(??(?=)(?!)(?<=)(?<!)(?i)(?)(+?)这种特殊组合情况下除外。
初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

实例:
字符串;tel:086-0666-88810009999
原始正则:”^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}KaTeX parse error: Undefined control sequence: \d at position 102: …价简写后正则写法:”^tel:\̲d̲{1,3}-[0]\d{2,3…” ,简写语法不是所有语言都支持。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115130.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • tar.bz2压缩方法「建议收藏」

    tar.bz2压缩方法「建议收藏」bzip2 -d  gcc-4.1.0.tar.bz2 —上面解压完之后执行下面的命令。tar-xvfgcc-4.1.0.tar或tar-xvf*.tar解完之后会出现多一个文件夹gcc-4.1.0

  • python控制windows窗口,并输入数据_python执行windows命令

    python控制windows窗口,并输入数据_python执行windows命令这是一些用于设置多播接收器的Python代码.它在mac和linux上运行良好.importsocket,structADDR=’239.239.250.1’PORT=8001sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)s…

  • 暂时性死区 理解

    暂时性死区 理解let和const声明的变量不存在变量提升,其作用域都是块级作用域,凡是在声明变量之前使用变量就会报错,所以,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporaldeadzone,简称TDZ)。if(true){//死区开始lzp=’lut’;//ReferenceErrorconsole….

  • CMS-项目的技术架构

    CMS-项目的技术架构2项目的技术架构2.1技术架构学成在线采用当前流行的前后端分离架构开发,由用户层、UI层、微服务层、数据层等部分组成,为PC、App、H5等客户端用户提供服务。下图是系统的技术架构图:业务流程举例:用户可以通过pc、手机等客户端访问系统进行在线学习。系统应用CDN技术,对一些图片、CSS、视频等资源从CDN调度访问。所有的请求全部经过负载均衡器。对于PC、H5等客户端请求,…

  • python可视化图表(python 显示图片)

    目录一、fig,ax=plt.subplots()的作用?二、参数的含义?三、怎么在一个图上排列多个子图?四、怎么把多个子图一起合并到一个图上?《PythonforDataAnalysis》2ndEdition一、fig,ax=plt.subplots()的作用?它是用来创建总画布/figure“窗口”的,有figure就可以在上边(或其中一个子…

  • python的命名规则_python命名规则[通俗易懂]

    python的命名规则_python命名规则[通俗易懂]广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!1、模块模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)#正确的模块名importdecoderimporthtml_parser#不推荐的模块名importdecoder-特殊的如init模块,如果模块是包的私有模块会使用前缀加一个…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号