关于python转义字符在正则匹配中的问题研究
问题
首先看一个问题:
import re
text = r"\学"
print(text)
zz = r"\学"
result = re.findall(zz,text)
print(result)
输出:
\学
['学']
为什么没有匹配到反斜杠?
分析
转义:
首先要理解一个概念,python中内置的语法字符窜中有一些特殊的符号,那就是\
,被成为转义字符。其中\
可以与很多字符结合形成一些特殊符号,例如 \n
表示回车。
原始字符串:
print(r"\n")
print("\n")
输出:
\n
在字符串前面加r
即可将字符串解析为原始字符串,即所见即所得,\
不再具有特殊含义。
回到之前的问题
import re
text = r"\学"
print(text)
zz = r"\学"
result = re.findall(zz,text)
print(result)
为什么匹配不到\
,明明都是原始字符串,这里要就是正则的问题了
符号 | 意义 |
---|---|
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字及下划线 |
\s | 匹配任意空白字符,等价于 [ \t\n\r\f]。 |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9]. |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
因为 在正则中 \
也是特殊符号。
所以要真正的匹配\
这个字符,正则匹配应该这样写r"\\"
,带入题目中就是zz = r"\\学"
而如果不使用原始字符串应该这样写:
import re
text = r"\学"
print(text)
zz = "\\\\学"
result = re.findall(zz,text)
print(result)
输出:
\学
['\\学']ve
已经匹配出来了,简单解释一下"\\\\学"
首先根据python内置的字符串解析,解析成实际的字符串表示的就是\\学
(也就是原始字符串),再由于正则语法解析就能解析出真正要匹配的字符串是\学
。
其实导致二次转义的这个问题的原因:
\
在python中字符串中是特殊符号,并且在正则中也是特殊符号,所以才需要转义两次
其他的问题
通过上面这个问题可以看到匹配出的内容是 \\学'
,也就是匹配出显示的内容不是以原始字符串的形式显示的,而print()
输出的内容是字符都是转义后的(转义字符生效),例如print('\n')
输出的是真的换行 而不是 \n
,而正则匹配出的内容更像是代码格式的字符串。
关于python转义字符在正则匹配中的问题研究的更多相关文章
- 正则匹配中 ^ $ 和 \b 的区别
正则匹配中 ^ $ 和 \b 的区别 ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...
- VB 正则匹配中的括号
1.正则表达式失灵(excel2016) 案列:提取一段字符串中数字并求和 Function sumnum(x) Dim regexp As Object Set reg = CreateObject ...
- 【python】给正则匹配部分命名
可以用?P<name>的方法给正则匹配的部分命名. 例:要将<字母,数字>的部分命名为test x = "abc <haha,123> test @@&q ...
- Python之字符串正则匹配
需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says &q ...
- python使用findall正则匹配出所有符合条件的字符串
# -*- coding:utf-8 -*- import re mystr="qqq key:www.baidu.com<br>key:www.tengxun.com<b ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- Nginx 笔记与总结(7)Location:正则匹配
在 /usr/local/nginx/conf/nginx.conf 的默认 server 段中,保留默认的 location 信息(之前测试的 location 配置删除): location / ...
- Python中正则匹配使用findall时的注意事项
在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串 "123@qq.comaaa@163.combbb@126.comasdf111@a ...
- python中正则匹配之re模块
Python中正则表达式 re:re是提供正则表达式匹配操作的模块 一.什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某个模式匹配,Python 自1.5版本起 ...
- Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异
转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...
随机推荐
- Java 自定义Excel数据排序
通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值.单元格颜色.字体颜色或图标等.在需要自定义排序情况下,我们也可以自行根据排序需要编辑数据排列顺序.本文,将通过 ...
- tar、gzip、zip、jar是什么,怎么查看?
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 如果你是后端程序员,我想你一定见过*.tar.gz.*.zip.*.jar后缀的文件吧,这些都是压缩文件,那这些文 ...
- 详解字符编码与 Unicode
人类交流使用 A.B.C.中 等字符,但计算机只认识 0 和 1.因此,就需要将人类的字符,转换成计算机认识的二进制编码.这个过程就是字符编码. ASCII 最简单.常用的字符编码就是 ASCII(A ...
- 8.云原生之Docker容器镜像构建最佳实践浅析
转载自:https://www.bilibili.com/read/cv15220861/?from=readlist 本章目录 0x02 Docker 镜像构建最佳实践浅析 1.Dockerfile ...
- Logstash:解析 JSON 文件并导入到 Elasticsearch 中
转载自:https://elasticstack.blog.csdn.net/article/details/114383426 在今天的文章中,我们将详述如何使用 Logstash 来解析 JSON ...
- 集合框架——LinkedList集合源码分析
目录 示例代码 底层代码 第1步(初始化集合) 第2步(往集合中添加一个元素) 第3步(往集合中添加第二个元素) 第4步(往集合中添加第三个元素) LinkedList添加元素流程示意图 第5步(删除 ...
- HDU1114 Piggy-Bank (完全背包)
完全背包模板,和01背包相比不用倒推,因为一种可以选多个. 这道题求最小,dp数组初始化为无穷即可. 1 #include<iostream> 2 #include<cstring& ...
- Sentinel安装教程【Linux+windows】
一.Sentinel的简介 Sentinel是阿里巴巴出品的一款流控组件,它以流量为切入点,在流量控制.断路.负载保护等多个领域开展工作,保障服务可靠性. 如果你学过netflix公司旗下的Hystr ...
- 不允许还有Java程序员不了解BlockingQueue阻塞队列的实现原理
我们平时开发中好像很少使用到BlockingQueue(阻塞队列),比如我们想要存储一组数据的时候会使用ArrayList,想要存储键值对数据会使用HashMap,在什么场景下需要用到Blocking ...
- String简介
String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的.实现了 ...