问题

首先看一个问题:

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转义字符在正则匹配中的问题研究的更多相关文章

  1. 正则匹配中 ^ $ 和 \b 的区别

    正则匹配中 ^ $ 和 \b 的区别     ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...

  2. VB 正则匹配中的括号

    1.正则表达式失灵(excel2016) 案列:提取一段字符串中数字并求和 Function sumnum(x) Dim regexp As Object Set reg = CreateObject ...

  3. 【python】给正则匹配部分命名

    可以用?P<name>的方法给正则匹配的部分命名. 例:要将<字母,数字>的部分命名为test x = "abc <haha,123> test @@&q ...

  4. Python之字符串正则匹配

    需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 ). 而你想修改它变成查找最短的可能匹配. import re text2 = 'Computer says &q ...

  5. python使用findall正则匹配出所有符合条件的字符串

    # -*- coding:utf-8 -*- import re mystr="qqq key:www.baidu.com<br>key:www.tengxun.com<b ...

  6. Python正则匹配字母大小写不敏感在读xml中的应用

    需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...

  7. Nginx 笔记与总结(7)Location:正则匹配

    在 /usr/local/nginx/conf/nginx.conf 的默认 server 段中,保留默认的 location 信息(之前测试的 location 配置删除): location / ...

  8. Python中正则匹配使用findall时的注意事项

    在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串  "123@qq.comaaa@163.combbb@126.comasdf111@a ...

  9. python中正则匹配之re模块

    Python中正则表达式 re:re是提供正则表达式匹配操作的模块 一.什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某个模式匹配,Python 自1.5版本起 ...

  10. Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异

    转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...

随机推荐

  1. 3、StringBuffer类

    StringBuffer类 java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删 很多方法与String相同,但StringBuffer是可变长度的 StringB ...

  2. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容

    使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...

  3. 2.云原生之Docker容器环境安装实践

    转载自:https://www.bilibili.com/read/cv15181036/?from=readlist 官方一键安装脚本 补充时间:[2020年4月22日 11:00:59] 一键安装 ...

  4. 8Hello world

    Name=input("请输入你的名字:") print('欢迎你',Name)

  5. LeetCode - 数组的改变和移动

    1. 数组的改变和移动总结 1.1 数组的改变 数组在内存中是一块连续的内存空间,我们可以直接通过下标进行访问,并进行修改. 在Java中,对于List类型来说,我们可以通过set(idx, elem ...

  6. Docker 部署 Kibana

    Docker 部署 Kibana 本篇主要介绍 使用 Docker 部署 kibana 用于操作 Elasticsearch 使用. 1. 前置准备 1.1 Elasticsearch 准备 可以先准 ...

  7. python锦鲤

    今日内容目录 垃圾回收机制 流程控制理论& 流程控制之分支结构& 流程控制之循环结果& 详情 Python垃圾回收机制 """ 有一些语言,内存空 ...

  8. 齐博x1如何开启自定义标签模板功能

    为安全起见,同时也为了避免用户随意添加风格导致默认模板不协调,系统默认关闭了类似V系列的自定义修改模板功能.如下图所示,默认是关闭的 你如果需要启用的话,把下面的代码,参考下图导进去后,就可以增加一个 ...

  9. SpringBoot内置工具类,告别瞎写工具类了

    不知大家有没有注意到,接手的项目中存在多个重复的工具类,发现其中很多功能,Spring 自带的都有.于是整理了本文,希望能够帮助到大家! 一.断言 断言是一个逻辑判断,用于检查不应该发生的情况 Ass ...

  10. Gitea 1.18 功能前瞻(其三):增强文本预览效果、继续扩展软件包注册中心、增强工单实用功能、完善了用户邀请机制和SEO

    今天是 10 月 26 日星期三,Gitea 周期性地发布了 1.18 的第一个 RC0 版本,在此阶段会收集一些功能和使用上的问题,随后还会发布 RC1,新功能的完整性和健壮性会逐步趋近正式版. 继 ...