老夫的正则表达式大成了,桀桀桀桀!!!【Python 正则表达式笔记】

这篇具有很好参考价值的文章主要介绍了老夫的正则表达式大成了,桀桀桀桀!!!【Python 正则表达式笔记】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、正则表达式语法

(一) 字符与字符类

特殊字符

\.^$?+*{}[]()| 为特殊字符,若想要使用字面值,必须使用 \ 进行转义

字符类 []

[] 匹配包含在方括号中的任何字符。它也可以指定范围,例:

  • [a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符
  • [u4e00-u9fa5] 匹配 Unicode 中文
  • [^\x00-\xff] 匹配双字节字符(包括中文)

[] 中:

  • [^] 表示否定字符类,比如[^0-9]表示可以匹配一个任意非数字的字符
  • ^ 放在第一个位置表示否定,放在其他位置表示字面值
  • \ 表示转义
  • - 放在中间表示范围,放在其他位置表示字面值
  • 其他特殊字符不再具备特殊意义,都表示字面值
  • 字符类内部可以使用速记法,比如\d \s \w

速记法

  • . 可以匹配除换行符之外的任何字符,如果有 re.DOTALL 标志,则匹配任意字符包括换行
  • \d 匹配一个 Unicode 数字,如果有 re.ASCII 标志,则匹配0-9
  • \D 匹配 Unicode 非数字
  • \s 匹配 Unicode 空白,如果带有 re.ASCII 标志,则匹配\t\n\r\f\v中的一个
  • \S 匹配 Unicode 非空白
  • \w 匹配 Unicode 单词字符,如果带有 re.ASCII 标志,则匹配[a-zA-Z0-9_]中的一个
  • \W 匹配 Unicode 非单词字符

(二)量词

  • ? 0次或1次
  • * 0次或多次
  • + 1次或者多次
  • {m} m次
  • {m,} 至少m次
  • {,n} 最多n次
  • {m,n} 至少m次,最多n次

注意点:以上量词都是「贪婪模式」,后加 ? 切换为「最小匹配模式」

(三) 断言

断言不会匹配任何文本,只是施加约束。常用断言:

  • \b匹配单词的边界,放在字符类 [] 中则表示 backspace
  • \B匹配非单词边界,受ASCII标记影响
  • \A 在起始处匹配
  • \Z 在结尾处匹配
  • ^ 在起始处匹配,如果有 MULTILINE 标志,则在每个换行符后匹配
  • $ 在结尾处匹配,如果有 MULTILINE 标志,则在每个换行符前匹配

(四)捕获组

()的作用:

  • ()是一个捕获组,可被 \N 引用,N 是序号,以左括号排位决定。\0 表示整个匹配的内容。
  • (?:) 可以关闭捕获,只用作分组
  • 使用 | 组合多个表达式,表示「或」
  • (?=...) 向前正项匹配,前方必须存在。 如\w+(?=,) 匹配 apple, banana 中的 apple
  • (?!...) 向前负项匹配,前方必须没有
  • (?<=...) 向后正项匹配,后方必须存在
  • (?<!...) 向后负项匹配,后方必须没有

命名捕获组:

语言 命名捕获组 搜索中引用 替换中引用
Python (?P<name>...) \N (?P=name) \N \g<name> $N
JavaScript (?<name>...) \N \k<name> $N
.NET (?<name>...) (?'name'...) \N \k<name> \k'name' $N ${N} ${name}
Perl (?<name>...) (?'name'...) \N \gN \g{N} \g{name}
(?N) (?+N) (?-N) (?Name)
兼容 .Net Python 的语法
$N ${N} $+{Name}

技巧:

  • 在搜索中,若 \12 无法表示「第一个捕获组 + 数字2」,可用 (?:\1)2 或者 \1[2] 表示
  • 在替换中,若 $12 无法表示「第一个捕获组 + 数字2」,可以用 $1\l2 或者 $1\u2 表示

(五)条件匹配

  • (?(id)yes_exp|no_exp):对应 id 的子表达式如果匹配到内容,则这里匹配 yes_exp,否则匹配 no_exp
  • Perl 支持的语法:(?(N)Yes|No) (?(<Name>)Yes|No) (?('Name')Yes|No) (?(?=Ahead)Yes|No)

实测 JavaScript 不支持条件匹配

(六)替换语法补充

一些在替换中使用的语法:

替换语法 作用
\l 下一个字符输出小写
\L 下一串字符输出小写
\u 下一个字符输出大写
\U 下一串字符输出大写
\E 终止 \U\L
语言 引用匹配之前的文本 引用匹配文本 引用匹配之后的文本
Perl ${^PREMATCH} | ${^MATCH} ${^POSTMATCH}

(七) 标志

传标志方法:

  • 正则表达式开头加标志 (?flags)pattern ,如 (?im)apple 表示不区分大小写
    • iIGNORECASE:忽略大小写,使匹配不区分大小写。
    • mMULTILINE:启用多行模式
    • sDOTALL:启用点字符(.)匹配任意字符,包括换行符。sspecial 的缩写。
    • xVERBOSE:启用详细模式,忽略空格和注释,可以使用多行形式编写更易读的正则表达式。可以用 [ ] \x20 (?-x: ) 表示空格。xextended 缩写
    • gGLOBAL: 查找所有符合条件的结果(Python 中不需要)
  • python 中 re.compile 的 flags 参数。flags 实质是一个数字,可以用 | 按位与传入多个标志
    • re.Are.ASCII
    • re.Ire.IGNORECASE
    • re.Mre.MULTILINE
    • re.Sre.DOTALL
    • re.Xre.VERBOSE

注释示例,匹配 <img> 标签:

pattern = re.compile(r"""(?ix)          # i 表示忽略大小写,x 表示开启注释模式
        <img\s+                         #标签的开始
            [^>]*?                      #不是src的属性
            src=                        #src属性的开始
                (?P<quote>["'])         #左引号
                (?P<image_name>[^"'<>]+?)  #图片名字
                (?P=quote)              #右括号
            [^>]*?                      #不是src的属性
        >                               #标签的结束
    """)

二、Python正则表达式模块

模块级 :

方法、属性 作用
compile(pattern) 预先编译正则表达式,返回 re.Pattern 对象
search(pattern, string, flags=0) 查找匹配的部分,返回 re.Match
match(pattern, string, flags=0) 从头匹配,返回符合规则的第一个值 re.Match
fullmatch(pattern, string, flags=0) 完全匹配(要从头到尾都匹配),返回 re.Match
split(pattern, string, maxsplit=0) 用匹配到的内容作为分割符,分割后,返回列表
findall(pattern, string) 查找所有,返回为列表,元素为 str。如果有捕获组,则列表元素为 tuple,包含空结果。
finditer(pattern, string) 查找所有,返回为 re.Match 的迭代器。
sub(pattern, repl, string, count=0) 返回替换后的字符串,repl 可以是一个函数(接收 Match,返回替换后的值)
subn(pattern, repl, string, count=0) 返回元组 (new_str, number),包含了替换次数
escape(pattern) 将特殊字符转义后返回,如 . 会返回 \.
purge() 清除缓存

re.compile() 可以预先编译正则表达式,返回 re.Pattern 对象,以提高匹配效率

方法、属性 作用
.search(string[, pos[, endpos]]) 查找匹配的部分,返回 re.Matchposendpos 限制查找区间
.match(string[, pos[, endpos]])
.fullmatch(string[, pos[, endpos]])
.split(string, maxsplit=0)
.findall()
.finditer()
.sub(repl, string, count=0)
.subn(repl, string, count=0)
.flags
.groups 有几个捕获组
.groupindex 一个字典,命名捕获组与序号对应
.pattern

re.Match 对象用于表示正则表达式匹配的结果:文章来源地址https://www.toymoban.com/news/detail-440716.html

方法、属性 作用
Match.group([group1, ...]) 返回:捕获组,或多个捕获组 tuple
Match[0] 等同于 group(0)
.group() 等同于 group(0)
.groups(default=None) 返回:元组,所有的子捕获组 (1, 2, 3...)。没有捕获到的组返回为 None。
.groupdict(default=None) 返回:词典,只包含有命名的捕获组
.start() 返回:匹配的起始位置
.end() 返回:匹配的结束位置
.span() 返回:元组 (start, end)
.expand(template) 用捕获到的组将 template 中的组引用展开
.pos 匹配开始的索引位置
.endpos 匹配结束的索引位置
.lastindex 最后一个捕获组的索引
.lastgroup 最后一个捕获组的名字
.string 传入的字符串

到了这里,关于老夫的正则表达式大成了,桀桀桀桀!!!【Python 正则表达式笔记】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python学习笔记:正则表达式、逻辑运算符、lamda、二叉树遍历规则、类的判断

    序号 实例 说明 1 . 匹配任何字符(除换行符以外) 2 d 等效于[0-9],匹配数字 3 D 等效于[^0-9],匹配非数字 4 s 等效于[trnf],匹配空格字符 5 S 等效于[^trnf],匹配非空格字符 6 w 等效于[A-Za-z0-9],匹配单字字符 7 W 等效于[^A-Za-z0-9],匹配非单字字符 8 [ab]cdef 匹配acdef或bcd

    2024年02月11日
    浏览(47)
  • 正则表达式学习笔记

    字符 说明 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。 例如:“n\\\"匹配字符串\\\"n”。“n\\\"匹配换行符。序列”\\\\“匹配”“,”(“匹配”(\\\"。 ^ 匹配输入字符串开始的位置。 如果设置了RegExp对象的Multiline属性,^还会与\\\"n\\\"或\\\"r\\\"之后的位置匹配。 $ 匹配输入

    2024年02月11日
    浏览(33)
  • 学习笔记-正则表达式

    https://www.runoob.com/regexp/regexp-tutorial.html 正则表达式re(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为\\\"元字符\\\"),可以用来描述和匹配字符串的特定模式。 个人理解,re是对字符序列进行建模,建立多对一映射,能够覆盖所有字符

    2024年02月09日
    浏览(34)
  • 正则表达式笔记

    /你的正则表达式写在这里/ 1?        1出现0次或1次 1*        1出现0次或多次 1+        1出现1次或多次 1{2}        1出现了2次 1{2,3}        1出现了2到3次 1{2,}        1出现了2次及以上 (5555){1}        5555出现了1次 (dog|cat)        dog或者cat [a-zA-Z]   

    2024年02月10日
    浏览(32)
  • 学习笔记整理-正则表达式-01-认识正则

    1. 什么是正则表达式 正则表达式(regular expression)描述了字符串\\\"构成模式\\\",经常被用于检查字符串是否符合预定的格式要求。 用一个例子快速演示正则表达式基本使用方法: 检查某个字符串是否是6位数字 /^d{6}$/ 就是正则表达式,它描述了字符串必须是\\\"6位数字\\\"的构成规则。

    2024年02月12日
    浏览(29)
  • Python正则表达式之学习正则表达式三步曲

            正则表达式描述了一种字符串匹配的模式,可以用来检查一个串的有无某子串,或者做子串匹配替换,取出子串等操作。也可以说正则表达式就是字符串的匹配规则,也可以理解为是一种模糊匹配,匹配满足正则条件的字符串。         1、数据验证(eg:表单验

    2024年02月15日
    浏览(45)
  • QT笔记 - QRegularExpression正则表达式

    QRegularExpression是Qt框架中的正则表达式类,它支持Perl兼容的正则表达式语法。 以下是一些常用的正则表达式语法规则: 1. 字符匹配:     * 纯字符串:直接写入要匹配的字符串。例如,\\\"hello\\\"匹配字符串\\\"hello\\\"。     * 转义字符:使用反斜杠()来转义特殊字符。例如,\\\"n\\\"匹配

    2024年01月23日
    浏览(34)
  • 机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

    为了完成本关任务,你需要掌握: 在 Python 中使用正则表达式; 最基础正则表达式; 正则匹配函数。 在 Python 中使用正则表达式 正可谓人生苦短,我用 Python。Python 有个特点就是库非常多,自然拥有正则匹配这种常见的库,并且此库已经嵌入在 Python 标准库中,使用起来非常

    2024年01月22日
    浏览(35)
  • python正则表达式-正则基础

    目录 一、任一元素 二、匹配特定的字符类别          1、d  w 三、多个元素          1、两位元素 [][]          2、* + ?          3、重复次数 {}          4、位置匹配 ^ $          5、子表达式()         []:1、[ab] 匹配a或b;        2、[0-9] 匹配任意一个数

    2024年02月05日
    浏览(32)
  • python 正则表达式

    2024年01月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包