问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

正则表达式特殊符号及用法

发布网友 发布时间:2022-10-10 07:48

我来回答

1个回答

热心网友 时间:2023-10-05 06:12

Python3 正则表达式特殊符号及用法(详细列表)

正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合、子组匹配、模式重复次数。正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只是一个字符串。

注1:为了便于理解,难点的地方均用 斜体 举了栗子。

注2:如果你对正则表达式一头雾水或者看不懂下边这个列表,那么小甲鱼极力推荐你先学习这个: Python3 如何优雅地使用正则表达式

字符 含义

.                表示匹配除了换行符外的任何字符

                注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符)

A | B,    表示匹配正则表达式 A 或者 B

^                1. (脱字符)匹配输入字符串的开始位置

                2. 如果设置了 re.MULTILINE 标志,^ 也匹配换行符之后的位置

$            1. 匹配输入字符串的结束位置

                2. 如果设置了 re.MULTILINE 标志,$ 也匹配换行符之前的位置

\            1. 将一个普通字符变成特殊字符,例如 \d 表示匹配所有十进制数字

                2. 解除元字符的特殊功能,例如 \. 表示匹配点号本身

                3. 引用序号对应的子组所匹配的字符串

                4. 详见下方列举

[...]            字符类,匹配所包含的任意一个字符

                注1:连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符

                注2:特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如 *、+、? 等均作为普通字符匹配

                注3:脱字符 ^ 如果出现在首位则表示匹配不包含其中的任意字符;如果 ^ 出现在字符串中间就仅作为普通字符匹配

{M,N}            M 和 N 均为非负整数,其中 M <= N,表示前边的 RE 匹配 M ~ N 次

                    注1:{M,} 表示至少匹配 M 次

                    注2:{,N} 等价于 {0,N}

                    注3:{N} 表示需要匹配 N 次

*                    匹配前面的子表达式零次或多次,等价于 {0,}

+                    匹配前面的子表达式一次或多次,等价于 {1,}

?                    匹配前面的子表达式零次或一次,等价于 {0,1}

                       *?, +?, ??默认情况下 *、+ 和 ? 的匹配模式是贪婪模式(即会尽可能多地匹配符合规则的字符串);*?、+? 和 ?? 表示启用对应的非贪婪模式。

举个栗子:对于字符串 "FishCCC",正则表达式 FishC+ 会匹配整个字符串,而 FishC+? 则匹配 "FishC"。

{M,N}?            同上,启用非贪婪模式,即只匹配 M 次

(...)                匹配圆括号中的正则表达式,或者指定一个子组的开始和结束位置

注:子组的内容可以在匹配之后被 \数字 再次引用 

举个栗子:(\w+) \1 可以字符串 "FishC FishC.com" 中的 "FishC FishC"(注意有空格)

(?...)(? 开头的表示为正则表达式的扩展语法(下边这些是 Python 支持的所有扩展语法)

(?aiLmsux)1. (? 后可以紧跟着 'a','i','L','m','s','u','x' 中的一个或多个字符,只能在正则表达式的开头使用

2. 每一个字符对应一种匹配标志:re-A(只匹配 ASCII 字符),re-I(忽略大小写),re-L(区域设置),re-M(多行模式), re-S(. 匹配任何符号),re-X(详细表达式),包含这些字符将会影响整个正则表达式的规则

3. 当你不想通过 re.compile() 设置正则表达式标志,这种方法就非常有用啦

注意,由于 (?x) 决定正则表达式如何被解析,所以它应该总是被放在最前边(最多允许前边有空白符)。如果 (?x) 的前边是非空白字符,那么 (?x) 就发挥不了作用了。

(?:...)非捕获组,即该子组匹配的字符串无法从后边获取

(?P<name>...)命名组,通过组的名字(name)即可访问到子组匹配的字符串

(?P=name)反向引用一个命名组,它匹配指定命名组匹配的任何内容

(?#...)注释,括号中的内容将被忽略

(?=...)前向肯定断言。如果当前包含的正则表达式(这里以 ... 表示)在当前位置成功匹配,则代表成功,否则失败。一旦该部分正则表达式被匹配引擎尝试过,就不会继续进行匹配了;剩下的模式在此断言开始的地方继续尝试。

举个栗子:love(?=FishC) 只匹配后边紧跟着 "FishC" 的字符串 "love"

(?!...)前向否定断言。这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败)。

举个栗子:FishC(?!\.com) 只匹配后边不是 ".com" 的字符串 "FishC"

(?<=...)后向肯定断言。跟前向肯定断言一样,只是方向相反。

举个栗子:(?<=love)FishC 只匹配前边紧跟着 "love" 的字符串 "FishC"

(?<!...)后向否定断言。跟前向肯定断言一样,只是方向相反。

举个栗子:(?<!FishC)\.com 只匹配前边不是 "FishC" 的字符串 ".com"

(?(id/name)yes-pattern|no-pattern)1. 如果子组的序号或名字存在的话,则尝试 yes-pattern 匹配模式;否则尝试 no-pattern 匹配模式

2. no-pattern 是可选的

举个栗子:(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) 是一个匹配邮件格式的正则表达式,可以匹配 和 'user@fishc.com',但是不会匹配 ''

\下边列举了由字符 '\' 和另一个字符组成的特殊含义。注意,'\' + 元字符的组合可以解除元字符的特殊功能

\序号1. 引用序号对应的子组所匹配的字符串,子组的序号从 1 开始计算

2. 如果序号是以 0 开头,或者 3 个数字的长度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符

举个栗子:(.+) \1 会匹配 "FishC FishC" 或 "55 55",但不会匹配 "FishCFishC"(注意,因为子组后边还有一个空格)

\A匹配输入字符串的开始位置

\Z匹配输入字符串的结束位置

\b匹配一个单词边界,单词被定义为 Unidcode 的字母数字或下横线字符

举个栗子:\bFishC\b 会匹配字符串 "love FishC"、FishC." 或 "(FishC)"

\B匹配非单词边界,其实就是与 \b 相反

举个栗子:py\B  会匹配字符串 "python"、"py3"  或 "py2",但不会匹配 "py  "、"py." 或  "py!"

\d1. 对于 Unicode(str 类型)模式:匹配任何一个数字,包括 [0-9] 和其他数字字符;如果开启了 re.ASCII 标志,就只匹配 [0-9]

2. 对于 8 位(bytes 类型)模式:匹配 [0-9] 中任何一个数字

\D匹配任何非 Unicode 的数字,其实就是与 \d 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^0-9]

\s1. 对于 Unicode(str 类型)模式:匹配 Unicode 中的空白字符(包括 [ \t\n\r\f\v] 以及其他空白字符);如果开启了 re.ASCII 标志,就只匹配 [ \t\n\r\f\v]

2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的空白字符,即 [ \t\n\r\f\v]

\S匹配任何非 Unicode 中的空白字符,其实就是与 \s 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^ \t\n\r\f\v]

\w1. 对于 Unicode(str 类型)模式:匹配任何 Unicode 的单词字符,基本上所有语言的字符都可以匹配,当然也包括数字和下横线;如果开启了 re.ASCII 标志,就只匹配 [a-zA-Z0-9_]

2. 对于 8 位(bytes 类型)模式:匹配 ASCII 中定义的字母数字,即 [a-zA-Z0-9_]

\W匹配任何非 Unicode 的单词字符,其实就是与 \w 相反;如果开启了 re.ASCII 标志,则相当于 [^a-zA-Z0-9_]

转义符号正则表达式还支持大部分 Python 字符串的转义符号:\a,\b,\f,\n,\r,\t,\u,\U,\v,\x,\\

注1:\b 通常用于匹配一个单词边界,只有在字符类中才表示“退格”

注2:\u 和 \U 只有在 Unicode 模式下才会被识别

注3:八进制转义(\数字)是有*的,如果第一个数字是 0,或者如果有 3 个八进制数字,那么就被认为是八进制数;其他情况则被认为是子组引用;至于字符串,八进制转义总是最多只能是 3 个数字的长度
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
低温还原粉化性检验方法 ...播放量破50亿,大胃王“浪胃仙”是如何在抖音崛起的? 网络直播间:新部落的建构及其亚文化特征 网络直播中吃播的文化输出 我用圆通快递从河南商丘发到洛阳几天能到 商丘圆通快递几点下班? 河南商丘到江苏南京圆通快递,大概要多久? 四大名著语录 “命中注定我爱你”真的好看么? 好看的偶像剧 命中注定我爱你 农村商业银行是不是农业银行 2021买什么轿车好 NACHI钻头中国有代理吗?NACHI钻头质量好吗? 加工高硬度钢材加工中心用什么钻头比较好? 进口的合金钻头有哪些牌子 不二越钻头市场上假货多吗 什么是荔枝钻头 台式电脑每次开机出来英文要按f1才能开机大神看看什么情况 电脑开机显示英文f1。怎么办? 台式电脑开机出现f1怎么解决 台式电脑开机出现f1怎么办 冬天里的一缕阳光800字作文 梦到爷爷复活打我妈妈 商丘公积金提取流程步骤 扫地机器人为什么倒着走(扫地机器人为什么倒着走显示故障) 科沃斯扫地机器人倒走怎么回事 英特尔13代酷睿什么时候上市啊? 英特尔13代酷睿啥时候出? 天价自助餐428一位,为何5个胖子花两千多却没吃饱? 查出人型支原体阳性,需要治疗吗 人型支原体听说过吗?严重吗? 人型支原体阳性严重吗? 污水源热泵属于什么行业? 污水源热泵算可再生能源吗? 水源热泵为什么能成为可再生能源技术 枸杞三种人坚决不能吃枸杞 煎带鱼的家常方法 家常干煎带鱼的做法 医用口罩有哪三种类型? 华为屏幕用不了的情况下怎么关机 参照下文方法 咸鱼2200的iphone11pro真的假的 2018好看的电影有哪些? 2018有什么好电影吗? 2018电视剧有哪些好剧值得一看? 柚子保存与销售技巧 柚子保存方法与销售技巧 卖水果的销售心理战术 我想查询下重庆海尔小额贷款有限公司下属有哪些贷款app- 问一问 中山保利国际广场和万科柏悦湾哪个楼盘更好 【保利国际广场】小区的物业有专门电话吗,号码是多少 中山保利国际广场怎么样 姨妈期间应该吃什么食物 莲花湖的作文350字 描写莲花500字作文