Python3 正则表达式特殊符号及用法(详细列表)
文章目录
- 表格
- 实例
- |
- ^
- $
- \
- 数字是1 ~ 99:
- 数字是0:
- […………]
- {}
- 贪婪模式匹配
- 非贪婪模式匹配
- \b
- findall
- 注意:
- 实例1
- 实例2
- 实例3
- 实例4
- 如何消除findall这种返回方法
表格
字符 | 含义 |
---|---|
.
|
表示匹配除了换行符外的任何字符;注:通过设置 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 可以字符串 “Fish Fish.com” 中的 “Fish Fish”(注意有空格)
|
(?...)
|
(? 开头的表示为正则表达式的扩展语法(下边这些是 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(?=Fish) 只匹配后边紧跟着 “Fish” 的字符串 “love”
|
(?!...)
|
前向否定断言。这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败);举个栗子:Fish(?!\.com) 只匹配后边不是 “.com” 的字符串 “Fish”
|
(?<=...)
|
后向肯定断言。跟前向肯定断言一样,只是方向相反。举个栗子:(?<=love)Fish 只匹配前边紧跟着 "love" 的字符串 "Fish"
|
(?<!...)
|
后向否定断言。跟前向肯定断言一样,只是方向相反。举个栗子:(?<!Fish)\.com 只匹配前边不是 "Fish" 的字符串 ".com"
|
(?(id/name)yes-pattern|no-pattern)
|
1. 如果子组的序号或名字存在的话,则尝试 yes-pattern 匹配模式;否则尝试 no-pattern 匹配模式2. no-pattern 是可选的,举个栗子:(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) 是一个匹配邮件格式的正则表达式,可以匹配 <user@fishc.com> 和 'user@fishc.com' ,但是不会匹配 '<user@fishc.com' 或 'user@fishc.com>'
|
\
|
下边列举了由字符 '\' 和另一个字符组成的特殊含义。注意,'\' + 元字符的组合可以解除元字符的特殊功能
|
\序号 |
1. 引用序号对应的子组所匹配的字符串,子组的序号从 1 开始计算,2. 如果序号是以 0 开头,或者 3 个数字的长度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的 ASCII 码值对应的字符,举个栗子:(.+) \1 会匹配 “Fish Fish” 或 “55 55”,但不会匹配 "FishFish" (注意,因为子组后边还有一个空格)
|
\A | 匹配输入字符串的开始位置 |
\Z | 匹配输入字符串的结束位置 |
\b |
匹配一个单词边界,单词被定义为 Unicode 的字母数字或下横线字符,举个栗子:\bFish\b 会匹配字符串 "love Fish" 、"Fish." 或 "(Fish)"
|
\B |
匹配非单词边界,其实就是与 \b 相反,举个栗子:py\B 会匹配字符串 "python" 、"py3" 或 "py2" ,但不会匹配 "py "、“py.” 或 “py!”
|
\d | 1. 对于 Unicode(str 类型)模式:匹配任何一个数字,包括 [0-9] 和其他数字字符;如果开启了 re.ASCII 标志,就只匹配 [0-9];2. 对于 8 位(bytes 类型)模式:匹配 [0-9] 中任何一个数字 |
\D |
匹配任何非 Unicode 的数字,其实就是与 \d 相反;如果开启了 re.ASCII 标志,则相当于匹配 [^0-9]
|
\s |
1. 对于 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]
|
\w |
1. 对于 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 个数字的长度 |
实例
|
re.search(r'dog(C|D)','dogC')
re.search(r'dog(C|D)','dogD')
^
必须以脱字符后面的字符为输入字符串的开始位置,才能匹配成功
re.search(r'^dog(C|D)','dogD')
re.search(r'^dog(C|D)','l like dogD')
$
必须以这个字符前面的字符为输入字符串的结束位置,才能匹配成功
re.search(r'dog(C|D)$','l like dogD')
\
解除元字符的特殊功能:\.
匹配的就是一个.
\后面如果加数字的话,如果数字是1 ~ 99,那么它表示的引用序号对应的子组所匹配的字符串;如果跟着的数字是0或者是三位的数字,那么它是一个八进制数字,表示的是这个八进制数据所对应的ASCII码的字符
数字是1 ~ 99:
re.search(r'(dogD)\1','dogDdogD')
\1相当于dogD,因为这里1号子组就是dogD(用括号括了起来)
数字是0:
re.search(r'(dogD)\060','dogD0')
re.search(r'(dogD)\060','dogDdogDdogD')
切记是八进制!
re.search(r'(dogD)\141','dogDa')
[…………]
re.search(r'[.]','dogDa.txt')
re.search(r'\.','dogDa.txt')
re.findall(r'[a-z]','dogD.com')
re.findall(r'[\n]','dog.com\n')
最前面的脱字符(表示后面字符除外的字符):
re.findall(r'[^a-z]','PdogL.Zcom\n')
最后面的脱字符(表示匹配脱字符本身):
re.findall(r'[a-z^]','^PdogL.Zcom\n')
{}
re.search(r'dogD{3}','dogDDDD')
re.search(r'(dogD){3}','dogDdogDdogD')
注意:
正则表达式里面不能随意加空格。。
贪婪模式匹配
p='<html><title>l love dogD.com</title></html>'
re.search(r'<.+>',p)
非贪婪模式匹配
p='<html><title>l love dogD.com</title></html>'
re.search(r'<.+?>',p)
\b
re.findall(r'\bdogD\b','dogD.com!dogD_com(dogD)')
这里所匹配出来的是,
第一个:dogD.com
前面这个dogD
第二个:(dogD)
这个dogD
至于下横线这里,被认为连着一个单词,并不是单词边界(.
和()
是边界),
\t是TAB键,\n是换行键,\r是回车,\f表示换页,\v表示垂直的制表符
findall
注意:
如果给出的正则表达式包含子组的话,那么就会把子组的内容单独返回回来;如果存在多个子组,那么就会把匹配内容组合成元组的形式来进行返回
实例1
p=r'dogD(fish)'
html='dogDfishabcd'
iplist=re.findall(p,html)
iplist
实例2
p=r'dogD(fish)'
html='dogDfishfishfish'
iplist=re.findall(p,html)
iplist
实例3
p=r'(dogD)(fish)'
html='dogDfishfishfish'
iplist=re.findall(p,html)
iplist
实例4
p=r'(([0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}([0,1]?\d?\d|2[0-4]\d|25[0-5])'
html='192.168.1.1 192.135.124.125 192.168.126.124'
re.findall(p,html)
如何消除findall这种返回方法
p=r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])'html='192.168.1.1 192.135.124.125 192.168.126.124'
re.findall(p,html)
Python3 正则表达式特殊符号及用法(详细列表)相关推荐
- python语言所使用的特殊含义符号_Python3 正则表达式特殊符号及用法
Python3 正则表达式特殊符号及用法(详细列表) 正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合.子组匹配.模式重 复次数.正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不 ...
- Python——正则表达式特殊符号及用法
由于正则表达式的内容比较多,所以单独写成一系列文章,主要内容是根据小甲鱼所讲的内容综合一下正则表达式的笔记. 贴上小甲鱼的<Python3 如何优雅地使用正则表达式>系列可观看的博客地址: ...
- python3 正则匹配特殊符号_Python3 正则表达式特殊符号及用法(详细列表)
字符含义 .表示匹配除了换行符外的任何字符注:通过设置 re.DOTALL 标志可以使.匹配任何字符(包含换行符) |A | B,表示匹配正则表达式 A 或者 B ^1. (脱字符)匹配输入字符串的开 ...
- Python3正则表达式(慢慢更新中~)
说明: 在python中,先是正则基本理论和字符代表意思,接着是python3中re的实操正则模块 理论: 一.元字符 二.限定符 三.字符类 四.排除字符 五.选择字符 六.转义字符 ...
- Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等)
Practical Python基础1(数据类型,运算,比较符号,字符串,列表,函数等) Python是一种解释性的高级编程语言.它通常被归类为"脚本语言",被认为类似于Perl. ...
- python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解
扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...
- 【MADDPG(MPE)——环境配置与用法详细介绍(多智能体强化学习))】
MADDPG(MPE)--环境配置与用法详细介绍(多智能体强化学习) MADDPG(MPE) 介绍 MPE环境安装教程 前期准备 MPE 安装包介绍 MPE 安装环境要求 开始安装 环境测试 MPE环 ...
- Numpy用法详细总结:学习numpy如何使用,看这一篇文章就足够了
Numpy用法详细总结 一.创建ndarray及查看数据类型 1. 使用np.array()由python list创建 图片与array数组的关系 2. 使用np的常用函数创建 二.ndarray的 ...
- top命令参数详解(linux top命令的用法详细详解)
通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. top命令输出长这样: top命令参数详解(linux top命令的用法详细详解) 以下解析一下各个字段 ...
最新文章
- PMVS:多视图匹配经典算法
- 关于Arrays类总结
- 混合云部署MySQL集群_数据库混合云解决方案
- (一) 自带刷新的列表-LtRecyclerView v2.x版本(LtAdapter)(基本使用)
- Jenkins Gitee 实现持续集成CI/CD工具【免费、推荐】
- sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...
- 用正则表达式抽取文本
- 盘点实际项目应用中的最佳机器学习模型
- 简明Linux命令行笔记:locate
- 24. 使用GitHub
- php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
- python中round的用法_python中round函数如何使用
- CSS的选择器(超详细!!)
- RevitAPI: 当前视图为透视图的时候IdlingEvent不会被触发
- 基于 RFID 与 ZigBee 智能汽车装配生产线车模追溯系统设计
- oracle通过DBlink连接神通数据库方法教程
- uniform对象及其使用
- Vue和elementUI常用组件问题
- .NetCore外国一些高质量博客分享
- linux下ifconfig命令找不到解决办法
热门文章
- 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- DL之VGG16:基于VGG16迁移技术实现猫狗分类识别(图片数据量调整→保存h5模型)
- Py之albumentations:albumentations库函数的简介、安装、使用方法之详细攻略
- 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
- ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
- 成功解决FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.
- Python运行异常 Original error was: DLL load failed:
- JAVA_OA管理系统(三):Spring参数注入
- JavaScript优化基本篇
- dropout+Batch Normalization理解