正则表达式详细讲解篇

正则表达式详细讲解篇

正则表达式,简称为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…” ,简写语法不是所有语言都支持。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest skipif_pytest失败重跑

    pytest skipif_pytest失败重跑前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月31日
    8
  • ubuntu如何卸载docker_ubuntu卸载干净

    ubuntu如何卸载docker_ubuntu卸载干净Ubuntu卸载Docker方法卸载旧版本的方法:旧版本的docker名字叫docker,docker.io,或者docker-engine#删除docker命令acestang@acestang:~$sudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc#删除docker默认安装的文件acestang@acestang:~$sudorm-rf/var/lib/docker/#通过doc

    2022年10月21日
    5
  • ideavim怎么用_idea基本使用教程

    ideavim怎么用_idea基本使用教程ideavim使用分享ideavim使用ideavim介绍ideavim是JetBrains官方开发的模拟vim插件,熟练ideavim的人可以更快的进行操作,大部分操作都可以用键盘来代替。纯vim也能进行更高效的开发,但是一款适合自己深定义的配置,能够让人更加高效。配合ide的智能补全,就一个字爽ideavim的安装idea中自带的插件管理搜索ideavim然后选择安装macos打开idea配置cmd+,windows打开idea配置ctrl+shfit+s

    2022年10月1日
    3
  • 计算机负数补码_负数用补码表示如何理解

    计算机负数补码_负数用补码表示如何理解在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001。(2)负数的补码:符号位为1

    2025年6月13日
    3
  • 常量池和堆的区别_字符串常量池在堆中还是方法区

    常量池和堆的区别_字符串常量池在堆中还是方法区写在前面:博主是一位普普通通的19届二本大学生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。目录:1.常量池与Class常量池2.运.

    2022年7月28日
    11
  • Android studio 运行demo时一直卡在”Installing APKS”时的解决办法

    Android studio 运行demo时一直卡在”Installing APKS”时的解决办法

    2022年3月3日
    118

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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