对正则表达式中的反斜杠感到困惑[重复]

2023-12-20

我对正则表达式中的反斜杠感到困惑。在正则表达式中\有特殊含义,例如\d表示十进制数字。如果在反斜杠前面添加反斜杠,则这种特殊含义就会丢失。在里面正则表达式指南 https://docs.python.org/3/howto/regex.html#regex-howto人们可以读到:

也许最重要的元字符是反斜杠,\。与 Python 字符串文字一样,反斜杠后面可以跟各种字符来表示各种特殊序列。它还用于转义所有元字符,以便您仍然可以按模式匹配它们;例如,如果您需要匹配[ or \,您可以在它们前面加上反斜杠以删除它们的特殊含义:\[ or \\.

So print(re.search('\d', '\d')) gives None因为\d匹配任何十进制数字,但没有\d.

我现在会期望print(re.search('\\d', '\d'))匹配\d但答案仍然是None.

Only print(re.search('\\\d', '\d'))给出作为输出<_sre.SRE_Match object; span=(0, 2), match='\\d'>.

有人有解释吗?


造成混乱的原因是反斜杠字符\被用作两个不同层面的逃生通道。首先,Python解释器本身执行替换\之前re模块曾经看到过你的字符串。例如,\n转换为换行符,\t被转换为制表符等。要获得实际的\字符,你也可以逃避它,所以\\给出一个\特点。如果后面的字符\不是公认的转义字符,那么\被像任何其他角色一样对待并通过,但我不建议依赖于此。相反,总是逃避你的\字符加倍,即\\.

如果您想了解 Python 如何扩展字符串转义符,只需打印出该字符串即可。例如:

s = 'a\\b\tc'
print(s)

If s是聚合数据类型的一部分,例如列表或元组,如果打印该聚合,Python 会将字符串括在单引号中,并包含\转义(以规范形式),因此请注意字符串的打印方式。如果您只是在解释器中输入带引号的字符串,它也会显示用引号括起来的字符串\逃脱。

一旦你知道你的字符串是如何编码的,你就可以考虑什么re模块会处理它。比如说,如果你想逃离\在你传递给的字符串中re模块,您需要通过\\ to re,这意味着您需要使用\\\\在你引用的Python字符串中。 Python 字符串将以\\re模块会将其视为单个文字\特点。

另一种包含方式\Python 字符串中的字符是使用原始字符串,例如r'a\b'相当于"a\\b".

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

对正则表达式中的反斜杠感到困惑[重复] 的相关文章

随机推荐

  • 有没有办法为 ASP.NET 中的应用程序定义时区?

    有没有一种方法可以为 ASP NET 中的应用程序定义时区 以便隐式转换从当前服务器时间读取 与当前服务器时间比较的所有时间 或者我是否需要在每次 DateTime Now 调用时放入转换语句 我不确定 ASP 的最新发展 但是这个2006
  • 不带括号的 C 函数调用

    这是一个简单的 C 程序 include
  • C# 中 float 类型的最大值

    当我这样做时 float x float MaxValue 我的结果是 3 40282347E 38 E 38是什么 如果没有这个符号 我该如何表示最大数 msdn说范围 1 5 10 45到 3 4 10 38 但这对我没有帮助 E 38
  • nvprof 输出:“没有分析内核”是什么意思,以及如何修复它

    我最近通过系统的包管理器在我的 arch Linux 机器上安装了 Cuda 并且我一直在尝试通过运行一个简单的向量加法程序来测试它是否正常工作 我只是复制粘贴代码本教程 https devblogs nvidia com even eas
  • 在 x86 汇编中划分 64 位时出现问题

    在 x86 程序集中进行划分时 我不断收到 程序收到信号 SIGFPE 算术异常 这很令人困惑 因为如果我除以 10 答案应该小于 64 位答案 mov 0x82b40000 eax mov 0x21c3677c edx mov 10000
  • 构造函数的单元测试

    我正在实验室进行单元测试 下面是我正在测试的应用程序中的一段代码 大多数单元测试都已完成 但关于下面的构造函数 我只是不知道如何测试它 例如 构造函数到底对数组元素做了什么 测试构造函数的好方法是什么 是否有一个善良的灵魂可以给我一个正确的
  • 嵌入字体在 Flex 移动 ActionBar 中不起作用

    我嵌入了一些字体 并在我的移动应用程序中使用它们 它们都正常工作 除了我尝试用于 ActionBar 的字体 他们在其他地方工作 并替代 Comic Sans MS for titleCGF 将其更改为 Comic Sans 那么为什么它不
  • C++中不同参数的重载虚函数

    我想在 C 中重载具有不同参数的虚函数 但它不起作用 virtual void Draw int nDeltaX int nDeltaY virtual void Draw int nDeltaX int nDeltaY bool m bF
  • 找不到必要的构建工具。使用 devtools 遇到错误

    我正在尝试安装 BTYDPlus 包 https github com mplatzer BTYDplus https github com mplatzer BTYDplus 当我输入这个命令时 devtools install gith
  • Excel-VBA:在 .aspx 网页上抓取数据之前的按钮和下拉列表

    我想使用 VBA 从网页获取表格 但无法直接访问它 因为我需要从一个选项卡切换到另一个选项卡 该问题依赖于网页的 aspx 端 URL 不会相应地演变 URL http www morningstar fr fr fundquickrank
  • 使用 aws cli 将日志流式传输到 elastic

    我想启用从 Cloudwatch 到 Elasticsearch 到 Amazon Elasticsearch Service 的流 我熟悉如何手动执行此操作 我正在寻找一种通过运行 aws cli 命令来实现此目的的方法 假设 Elast
  • Vagrant/Clojure/Emacs

    我想构建一个标准环境 用于使用 Emacs 探索 Clojure 有人有适合这个的食谱吗 我正在考虑一个运行 Ubuntu 风格的 Vagrant 系统 带有 NREPL 和一些有用的 EMACS 支持插件 vagrant box add
  • 批量插入现有数据:防止 JPA 在每次插入之前进行选择

    我正在开发一个 Spring Boot 应用程序 该应用程序使用 JPA Hibernate 作为持久层 我目前正在实现迁移功能 我们基本上将系统的所有现有实体转储到 XML 文件中 此导出还包括实体的 ID 我遇到的问题位于另一侧 重新导
  • 标准 C++14 委员会草案是否公开?

    截至上周六 http isocpp org blog 2013 04 trip report iso c spring 2013 meeting 今天下午在英国布里斯托尔 ISO C 标准委员会通过了 通用 lambda 动态数组 C99
  • cuda 推力中的 fp16 支持

    我无法在推力 cuda 模板库中找到有关 fp16 支持的任何信息 甚至路线图页面也没有任何相关信息 https github com thrust thrust wiki Roadmap https github com thrust t
  • R如何安装指定版本的bioconductor包?

    我想使用的当前版本的软件包在生物导体上失败 然而 旧版本曾经可以工作 我想知道如何安装特定版本的生物导体包 提前致谢 在我的例子中 该软件包称为biomaRt 失败的版本是2 34 2 而2 34 0是成功的 重要更新 今年是2022年 我
  • Jersey:@PathParam,带逗号到 List

    我想用这种模式调用我的网络服务 resource 1 2 3 在我的类中 我想将参数绑定到对象列表 Path resource public class AppWS GET Path params public Response get P
  • 如何消除使用 randomForest 运行预测的“外部函数调用中的 NA/NaN/Inf (arg 7)”

    我对此进行了广泛的研究 但没有找到解决方案 我已经清理了我的数据集 如下所示 library raster impute mean lt function x replace x is na x is nan x is infinite x
  • Stack Overflow 与支持 JavaScript 的横幅配合使用效果最佳

    我试图模仿该网站的 Javascript 要求横幅 并且如果允许 启用 javascript 则隐藏以下 div 但我在页面加载时看到它的闪现 一瞥 div Craftystuff com works best with JavaScrip
  • 对正则表达式中的反斜杠感到困惑[重复]

    这个问题在这里已经有答案了 我对正则表达式中的反斜杠感到困惑 在正则表达式中 有特殊含义 例如 d表示十进制数字 如果在反斜杠前面添加反斜杠 则这种特殊含义就会丢失 在里面正则表达式指南 https docs python org 3 ho