[转载]Python正则表达式匹配反斜杠'\'问题

2023-10-29

在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)?


一、引入

在学习了Python特殊字符和原始字符串之后,我觉得答案应该是这样的:
1)普通字符串:'\\'
2)原始字符串:r'\'
但事实上在提取诸如“3\8”反斜杠之前的数字时,我屡次碰壁,始终得不到结果。最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。


二、字符串转义

反斜杠,在Python中比较特殊,就是它可以用来构成一些特殊字符,比如“\n”表示换行,“\t”表示制表符。下面是使用“\n”的一行代码:
 

>>>print ('Hello\World\nPython' )

结果为:
“Hello\World
Python“
可以看到其中的“\n”已转义为换行符,而“\W”没有发生转义,原因是“\W”在“字符串转义”中并不对应着特殊字符,没有特殊含义。

如果现在要求变了,要求不对“\n”转义为换行,而是原封不动输出为“Hello\World\nPython”,该怎么办呢?

1)可以这样写“Hello\World\\nPython”,这样输出的时候,“字符串转义”会把“\\”转义为“\”;
2)也可使用另一种方法:原始字符串;原始字符串(即r'...'):字符串中所有字符都直接按照字面意思来使用,不转义特殊字符。
下面是使用原始字符串的代码:

print r'Hello\World\nPython' 

结果为:
“Hello\World\nPython”
可以清楚看到,在使用原始字符串之后,“\n”未被转义为换行符,而是直接被输出了。


三、正则转义

好了,上面讲的只是“字符串转义”。同理,在正则表达式中也存在转义,我们姑且先称其为“正则转义”,其与“字符串转义”完全不同,比如“\d”代表数字,“\s”代表空白符。下面我们先编写开头的例子,然后再分析。
提取“3\8”反斜杠之前的数字:

复制代码

import re 

string = '3\8' 
m = re.search('(\d+)\\\\', string) 

if m is not None: 
print m.group(1) # 结果为:3 

n = re.search(r'(\d+)\\', string) 

if n is not None: 
print n.group(1) # 结果为:3

复制代码

 

正则表达式字符串需要经过两次转义,这两次分别是上面的“字符串转义”和“正则转义”,个人认为“字符串转义”一定先于“正则转义”。

1)'\\\\'的过程:
先进行“字符串转义”,前两个反斜杠和后两个反斜杠分别被转义成了一个反斜杠;即“\\|\\”被转成了“\|\”(“|”为方便看清,请自动忽略)。“字符串转义”后马上进行“正则转义”,“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。

2)r'\\'的过程:
由于原始字符串中所有字符直接按照字面意思来使用,不转义特殊字符,故不做“字符串转义”,直接进入第二步“正则转义”,在正则转义中“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。


四、结论

也就是说原始字符串(即r'...')与“正则转义”毫无关系,原始字符串仅在“字符串转义”中起作用,使字符串免去一次转义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[转载]Python正则表达式匹配反斜杠'\'问题 的相关文章

  • 2019年,iOS开发的你准备何时跳槽?

    序言 我相信很多人都在说 iOS行业不好了 iOS现在行情越来越难了 失业的人比找工作的人还要多 失业即相当于转行 跳槽即相当于降低自己的身价 那么做iOS开发的你 你是否在时刻准备着跳槽或者转行了 我们先看一下现在iOS行业 iOS程序员
  • 人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

    一 人脸修复算法 1 算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型 由南洋理工大学和商汤科技联合研究中心联合开发 它能够接收模糊或马赛克图像作为输入 并生成更清晰的原始图像 算法源码地址 https github
  • Qt5 项目文件.pro参数详解

    qmake的概念 qmake是用来为不同的平台的开发项目创建makefile的一个工具 qmake简化了makefile的生成 因此创建一个makefile只需要几行信息的文件 qmake可以供任何一个软件项目使用 而不用管他是不是使用Qt
  • C/C++Java生成指定长度随机字符串的三种方法

    学习 实验记录 也是方便自己以后查找 目录 两种实现思路 第一种实现思路 随机数转char 第二种思路 随机数取字符 C语言 使用char数组 C语言 使用char C 使用string类 Java通过字符数组或字符串方式 两种实现思路 C
  • Android OnTouchListener自定义 onTouch完全解析

    做android开发对touch事件是要清晰明了的 如果心存疑问 那么本博客 可以帮你清晰的屡清楚源码是如果实现 onLongClickListener onDoubleClickListener onClickListener 并且再次基
  • Python遍历多个列表:ValueError: too many values to unpack (expected 2)

    项目场景 在进行列表遍历的时候 希望同时遍历多个列表 问题描述 在使用循环遍历两个列表时 希望x y各自获取到数组a b里全部的元素 却产生了意料之外的报错 ValueError too many values to unpack expe
  • vue-introjs实现网站引导功能

    文章目录 说明 效果展示 静态 动态演示 相关技术 intro js 的一分钟入门说明 在 vue 项目中使用 intro js 安装 配置 使用 一些问题 只首次进入的时候显示引导 如果是 v for 循环出来的元素 我们咋显示引导内容呢
  • stm32f407 6个串口dma_STM32实例DMA 实验

    在前面我们提到过 DMA 这一章我们就来学习 STM32F1 的DMA 使 用 要实现的功能是 通过 K UP 按键控制 DMA 串口 1 数据的传送 在传送过程中让 D2 指示灯不断闪烁 直到数据传送完成 D1 指示灯闪烁提示系统正常运行
  • 华为od机试 python 计算快递主站点

    题目 题目背景 一个快递公司 有一些站点之间可以直接传送快递 如果站点A可以传送给站点B 同时站点B又可以传送给站点C 那么其实站点A也可以直接或间接地传送给站点C 现在的问题是 给定一些站点以及他们之间是否可以直接传送快递的信息 为了确保
  • QMessageBox的使用(二)

    参考博客 以下内容摘抄以下链接大神博客 https blog csdn net zjx1230 article details 83715421 QMessageBox warning this Search String Please e
  • python的launcher用法知识点总结

    更多编程教程请到 菜鸟教程 https www piaodoo com python launcher是适用于 Windows 的 Python 启动器 可帮助您定位和执行不同的 Python 版本 它允许脚本 或命令行 为特定的 Pyth
  • Idea 生成模板代码(Demo)

    1 在html文件中复制需要生成模板的代码 如下图选中部分 ctrl c 2 点击 File gt Settings 如下图 3 选择 Editor gt Live Template 点击右边的 然后点击 1 Live Template 如
  • 【Yarn】Yarn ApplicationMasterLauncher的工作机制

    文章目录 1 概述 2 源码 2 1 类变量 2 2 构造方法 2 4 serviceInit 2 5 serviceStart 2 6 LauncherThread 2 7 launch事件 2 8 AMLauncher的run 1 概述
  • 前端框架Vue(5)——Vue + Echarts (数据可视化)

    Echarts 是数据可视化中佼佼者 推荐大家可以玩一玩 非常实用 如果第一次接触Echarts的同学 这边有我以前写过的一篇入门 浅谈Echarts3 0 Vue Echarts 现附上代码
  • 数据结构作业:实现链表的基本操作

    数据结构作业 实现链表的基本操作 链表是一种常见的数据结构 它由一系列节点组成 每个节点包含数据和指向下一个节点的指针 本文将介绍链表的基本操作 包括创建链表 插入节点 删除节点以及遍历链表 首先 我们需要定义链表节点的结构体 节点包含一个
  • signature=31a231fa44057e3d64bcbe8f86676d0e,typescript-definitions

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 continuous auth client 1 1 0 version 1 2 3
  • 2020-04-08

    查看有关计算机的基本信息 1 右键点击 计算机 的 属性 就能看到这台电脑的基本信息了
  • Android Platform 3.0 SDK和Eclipse ADT安装记录(最初版本,纪念用)

    注意 此文非常非常地过时 只是用于个人回想 请参看 二 以后的笔记 20110926 注意 此文由于结构过于混乱且内容过时 将会被删除 用新的学习日记取代 如果我有时间的话 注 我只是为了学习简单的Android编程和模拟 所以没有考虑SD
  • 图示CORDIC算法

    目录 简介 原理 硬件实现 简介 CORDIC Coordinate Rotation Digital Computer 坐标旋转数字计算方法 应用 计算三角函数 cos sin tan 或者计算旋转角 原理 问题 在下图中 C点的坐标是
  • 阿里云教程安装WordPress没有 安装新插件 及 主题 的按钮

    表象 在插件页面和主题页面没有Add New的按钮 经过一番百度后 主要分为两派 文件权限问题 your wordpress site folder如果按照阿里云教程 该地址为 var www html wp blog 解决方案 chown

随机推荐

  • React 项目:计算器

    本教程专注于 React 部分 故对 css 及 js 不做过多解释 项目地址 yuzheng14 calculator github com 分析原型 应用中一共包含 4 个组件 APP 整个应用的整体 Display 展示输入数据及计算
  • 外网SSH远程连接linux服务器「cpolar内网穿透」

    文章目录 1 Linux CentOS安装cpolar 2 创建TCP隧道 3 随机地址公网远程连接 4 固定TCP地址 5 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下 SSH远程连接家里 公司的Linux Ce
  • SpringBoot结合Liquibase实现数据库变更管理

    从零打造项目 系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实
  • Java利用正则表达式获取指定两个字符串之间的内容

    package com starit analyse util import java text SimpleDateFormat import java util ArrayList import java util List impor
  • CentOS 7 下使用 MySQL 5.7 + PHP 7 + Apache 部署 Nextcloud

    准备 如果你准备使用 VPS 或者云主机作为 Nextcloud 服务器的话 可以先安装一个 Xshell 注 以下代码块中 代表注释 代表 Linux 命令 姊妹篇 Ubuntu 16 04 下使用 MySQL 5 7 PHP 7 Apa
  • python对指定字符串逆序的6种方法

    对于一个给定的字符串 逆序输出 这个任务对于python来说是一种很简单的操作 毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了 今天总结了一下python中对于字符串的逆序输出的几种常用的方法 方法一 直接使用字符串切片功能逆转
  • cuda学习笔记之异步并行执行

    异步函数使得主机端与设备端并行执行 控制在设备还没有完成前就被返回给主机线程 包括 kernel启动 以Async为后缀的内存拷贝函数 device到device内存拷贝函数 存储器初始化函数 比如cudaMemset cudaMemset
  • linux离线安装llvm,Debian/Ubuntu Linux 下安装LLVM/Clang 编译器

    第一步 首先编辑 etc apt sources list 加入以下源 Debian平台 deb http llvm org apt wheezy llvm toolchain wheezy main deb src http llvm o
  • Qt将文件保存到指定目录下(另存为的功能)

    因为Qt才开始入门 对文件的操作还不是很熟练 经过一段时间查找终于找出一些适用于入门的代码 QDir d d mkpath D 123 file new QFile D 123 tmp file gt open QFile WriteOnl
  • MySQL索引实现原理分析

    目前大部分数据库系统及文件系统都采用B Tree B树 或其变种B Tree B 树 作为索引结构 B Tree是数据库系统实现索引的首选数据结构 在 MySQL 中 索引属于存储引擎级别的概念 不同存储引擎对索引的实现方式是不同的 本文主
  • docker安装Apollo,并用java连接测试

    What is Apollo 背景 随着程序功能的日益复杂 程序的配置日益增多 各种功能的开关 参数的配置 服务器的地址 对程序配置的期望值也越来越高 配置修改后实时生效 灰度发布 分环境 分集群管理配置 完善的权限 审核机制 在这样的大环
  • C语言-文件

    C语言 文件 一 为什么使用文件 二 文件的打开与关闭 1 fopen 1 r w a 2 rb wb ab 3 r w a 4 rb wb ab 2 fclose 三 文件顺序读写函数 1 fgetc fputc 2 fgets fput
  • Ubuntu18.04 python 开发usb通信

    一 安装环境 1 安装pip sudo python3 get pip py 或 sudo i apt update apt install python3 pip 确定pip是否安装成功 xxx desktop pip3 version
  • 【Transformers】第 3 章:自动编码语言模型

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 瑞吉外卖项目——删除和批量删除套餐功能

    需求分析 用户点击删除按钮 可以删除对应的套餐 也可以通过复选框选择多个套餐 点击批量删除 一次性删除多个套餐 注意 对于状态在售卖中的套餐不能删除 需要先停售 之后才能删除 代码开发 前后端发交互 前端携带id发送请求 请求服务端 服务端
  • 牛客网剑指offer java 全部题解

    经过数月的努力 终于更完了牛客网的66道剑指offer 以下的顺序和大家在牛客网的顺序是一样的 排序也花了不少时间 希望对大家找工作 提高算法能力能起到些许帮助 每天一道剑指offer 二维数组中的查找 https mp weixin qq
  • Redis主从连接失败 connected_slaves:0

    进行主从连接配置时 主服务器使用info replication查到的 connected slaves数一直是0 原因是主服务器设置了密码 找到从服务器的配置文件redis conf 在配置文件中找到 masterauth
  • python如何做敏感度分析,使用SALib工具箱从测量数据进行Python敏感性分析

    I would like to understand how to use the SALib python toolbox to perform a Sobol sensitivity analysis to study paramete
  • IDEA 代码提交前流程及提交日志模板化

    前言 在开发大型项目时 通常都是由团队来进行开发 此时 每个人有每个人的代码编写风格和提交习惯 如果放任自由发挥 那么代码质量和代码提交日志就难免风格各异 导致项目代码质量难以保持统一 针对这一问题 往往公司在以项目组进行开发时 在进入正式
  • [转载]Python正则表达式匹配反斜杠'\'问题

    在学习Python正则式的过程中 有一个问题一直困扰我 如何去匹配一个反斜杠 即 一 引入 在学习了Python特殊字符和原始字符串之后 我觉得答案应该是这样的 1 普通字符串 2 原始字符串 r 但事实上在提取诸如 3 8 反斜杠之前的数