“原始字符串正则表达式”到底是什么以及如何使用它?

2023-12-07

来自 python 文档regex,关于'\'特点:

解决方案是使用 Python 的原始字符串表示法来表示正则 表达模式;反斜杠不会以任何特殊方式处理 前缀为的字符串文字'r'. So r"\n"是一个两个字符的字符串 含有'\' and 'n', while "\n"是一个单字符字符串 包含换行符。通常模式会用Python来表达 使用此原始字符串表示法的代码。

这个原始字符串表示法是什么?如果您使用原始字符串格式,这是否意味着"*"被视为文字字符而不是零个或多个指示符?这显然是不对的,否则正则表达式将完全失去它的力量。但是如果它是一个原始字符串,它如何识别换行符"\n"实际上是一个反斜杠和一个"n"?

我不跟。

编辑赏金:

我试图了解原始字符串正则表达式如何匹配换行符、制表符和字符集,例如\w对于单词或\d对于数字或所有其他内容,如果原始字符串模式不能将反斜杠识别为普通字符以外的任何内容。我确实可以使用一些很好的例子。


扎科宁的回答确实回答了你的问题,但不是直接回答。让我试着更直接一点,看看我是否能从扎科宁那里拿到赏金。

如果您停止使用术语“原始字符串正则表达式”和“原始字符串模式”,您可能会发现这更容易理解。这些术语合并了两个不同的概念:Python 源代码中特定字符串的表示形式,以及该字符串表示的正则表达式。

事实上,将它们视为两种不同的编程语言是有帮助的,每种语言都有自己的语法。 Python 语言的源代码除其他外还可以构建具有特定内容的字符串,并调用正则表达式系统。正则表达式系统的源代码驻留在字符串对象中,并匹配字符串。两种语言都使用反斜杠作为转义字符。

首先,了解字符串是字符序列(即字节或 Unicode 代码点;这里的区别并不重要)。 Python 源代码中有多种表示字符串的方法。 A原始字符串只是这些表示之一。如果两种表示产生相同的字符序列,则它们会产生相同的行为。

想象一个 2 个字符的字符串,由反斜杠字符后跟n特点。如果您知道的字符值反斜杠是 92,并且对于n是 110,那么这个表达式生成我们的字符串:

s = chr(92)+chr(110)
print len(s), s

2 \n

传统的Python字符串表示法"\n"不生成该字符串。相反,它会生成一个带有换行符的单字符字符串。这Python 文档2.4.1.字符串文字例如,“反斜杠 (\) 字符用于转义具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。”

s = "\n"
print len(s), s

1 
 

(请注意,换行符在本示例中不可见,但如果仔细观察,您会在“1”后面看到一个空行。)

为了得到我们的两个字符的字符串,我们必须使用另一个反斜杠逃避原文特殊含义的字符反斜杠特点:

s = "\\n"
print len(s), s

2 \n

如果你想表示有很多的字符串怎么办?反斜杠其中的人物?Python 文档2.4.1.字符串文字continue, “字符串文字可以选择以字母 'r' 或 'R' 为前缀;这样的字符串称为原始字符串并使用不同的规则来解释反斜杠转义序列。”这是我们的两个字符的字符串,使用原始字符串表示形式:

s = r"\n"
print len(s), s

2 \n

因此,我们有三种不同的字符串表示形式,它们都给出相同的字符串或字符序列:

print chr(92)+chr(110) == "\\n" == r"\n"
True

现在,让我们转向正则表达式。这Python 文档,7.2。re — 正则表达式运算说:“正则表达式使用反斜杠字符 ('\') 来指示特殊形式或允许使用特殊字符而不调用其特殊含义。这与 Python 在字符串文字中出于相同目的使用相同字符相冲突。 ”。

如果您想要一个与换行符匹配的 Python 正则表达式对象,那么您需要一个 2 个字符的字符串,其中包含反斜杠字符后跟n特点。以下几行代码全部设置完毕prog到识别换行符的正则表达式对象:

prog = re.compile(chr(92)+chr(110))
prog = re.compile("\\n")
prog = re.compile(r"\n")

那么为什么会这样呢“通常模式将使用这种原始字符串表示法在 Python 代码中表达。”?因为正则表达式通常是静态字符串,可以方便地表示为字符串文字。从可用的不同字符串文字表示法来看,当正则表达式包含反斜杠特点。

问题

Q: 表达方式怎么样re.compile(r"\s\tWord")? A:把字符串和正则表达式编译分开,分别理解,这样更容易理解。

s = r"\s\tWord"
prog = re.compile(s)

字符串s包含八个字符:a反斜杠, an s, a 反斜杠, a t,然后是四个字符Word.

Q:制表符和空格字符会发生什么情况?A:在Python语言层面,字符串s没有tab and space特点。它以四个字符开头:反斜杠, s, 反斜杠, t。同时,正则表达式系统将该字符串视为正则表达式语言中的源代码,其含义是“匹配由空格字符、制表符和四个字符组成的字符串”Word.

Q:如果被视为反斜杠-s 和反斜杠-t,你如何匹配它们?A:如果“you”和“that”更加具体的话,也许问题会更清楚:正则表达式系统如何匹配表达式backlash-s和backslash-t?作为“任何空白字符”和“tab特点'。

Q:或者如果您有 3 个字符的字符串反斜杠-n-换行符怎么办?A:在Python语言中,3个字符的字符串反斜杠-n-换行符可以表示为常规字符串"\\n\n",或原始字符串加上常规字符串r"\n" "\n",或以其他方式。正则表达式系统在找到任意两个连续的时匹配 3 个字符的字符串反斜杠-n-换行符newline人物。

注意:所有示例和文档参考均针对 Python 2.7。

Update:合并了 @Vladislav Zorov 和 @m.buettner 的回答以及 @Aerovistae 的后续问题的澄清。

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

“原始字符串正则表达式”到底是什么以及如何使用它? 的相关文章

  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • python array(10,1) 和 array(10,) 之间的区别

    我正在尝试将 MNIST 数据集加载到数组中 当我使用 X train y train X test y test mnist load data 我得到一个数组 y test 10000 但我希望它的形状为 10000 1 数组 1000
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • Slim 3 - 斜杠作为路由参数的一部分

    我需要使用可以包含斜杠 的参数来编写 URL 例如 经典的 hello username 路线 默认情况下 hello Fabien将匹配此路线 但不匹配 hello Fabien Kris 我想问你如何在 Slim 3 框架中做到这一点
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 确定分割形状几何体的“左”侧和“右”侧

    我的问题是 我怎样才能确定哪一个Aside and Bside的侧面已经分割的旋转矩形几何体 http nbviewer jupyter org urls dl dropbox com s ll3mchnx0jwzjnf determine
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • 每个类在jar文件中都有两个类文件

    我有一个 jar 文件 每个 java 文件有两个类文件 Java Foo java Bar java 类文件 Foo class Foo class Bar class Bar class 我已经验证每个类只有一个 java 文件 jav
  • 将 powershell 变量值返回给 c# 应用程序

    我正在从 C 运行 powershell 脚本 string scriptPath script myscript ps1 Runspace runspace RunspaceFactory CreateRunspace runspace
  • g++ 的 json-spirit 链接器标志是什么?

    我在任何地方都找不到这个 我已经在我的 ubuntu 服务器上安装了 json spiritapt get install json spirit dev 必须与什么链接器标志一起使用g 使用 json spirit 唯一的图书馆列在该包中
  • WebLogic 的 JavaEE API

    有不同的服务器特定 JavaEE API 实现 例如 glassfish javaee 或 jboss javaee 它们作为单独的 jar 文件分发 并且可以使用 Maven 依赖项附加到某些项目 有没有专门为WebLogic AS设计的
  • UDP 数据包未被 Wireshark 捕获,但被 UDP 应用程序捕获

    我有一个设计并运行的应用程序 它在端口上接收 UDP 广播 该应用程序一直工作得很好 但我想将应用程序收到的数据包与 Wireshark 捕获进行比较 我试图确保以最小的数据丢失捕获尽可能多的数据包 我最初认为我应该运行 Wireshark
  • 使用 GraphicsServices.h/GSEvent 以及使用 Xcode 编译 CLI iPhone 工具

    我将其发送给 KennyTM 在 GitHub 上有所有私有框架标头 但我想我也会在这里问 以防万一有人有一些好的想法或任何方法来帮助我 我正在尝试编写一个命令行实用程序 它发送 GSEvents 来操作键盘 触摸 拖动屏幕上的元素以及操作
  • 即使使用 CREATE 表授予,立即执行也会失败

    我在使用存储过程中的立即执行命令创建表时遇到问题 但是我收到 权限不足 的错误 我检查了其他线程并确保用户具有授予它的 CREATE TABLE 权限 但是我仍然看到同样的错误 SQL gt select from USER SYS PRI
  • WooCommerce Cart - 动态价格变量传递到自定义价格挂钩

    我在变量中获取动态自定义价格 我想将其传递给中的挂钩函数woocommerce before calculate totals钩在购物车中 但它不起作用 这是我的代码 add 200 I want to pass this variable
  • java.lang.NullPointerException:尝试调用虚拟方法“com.google.firebase.database”

    我正在尝试从 Firebase 数据库将数据检索到 RecyclerView 中 但遇到此错误 java lang NullPointerException 尝试调用虚拟方法 com google firebase database Dat
  • Web 服务与类文件 - 性能

    我试图找出执行此操作的最佳方法 我正在开发一个项目 并将所有数据访问层代码放入 ASMX 文件中 以使它们与我的表示层分开 我从后台代码调用所有方法并使用类文件等 Web 服务 我根据另一位开发人员的工作遵循这一做法 到目前为止 对此有两种
  • 如何在类声明之外定义 sfinae 类的成员?

    阅读完诸如此类的问题后sfinae 位于类体外部定义的成员函数 这不是同一个问题 另外 当使用 SFINAE 方法仅启用算术类型的类时 我仍然没有找到在类声明之外定义成员函数体的好方法 include
  • Swift 3 隐式解包选项导致错误的字符串插值

    Why are 隐式解包选项在 Swift 3 中使用字符串插值时未解包 Example 在 Playground 中运行以下代码 var str String str Hello print The following should no
  • 用facet对y轴进行排序

    我有这个数据框 library dplyr dat data frame parent c J J F F group c A 4 C 3 A 4 D 5 value c 1 2 3 4 count c 4 3 4 5 dat gt arr
  • IE 8 支持 JSON.stringify() 吗?

    我需要使用 JSON stringify Chrome Safari 和 Firefox 应该支持 我认为IE8也支持JSON对象 我认为 IE7 和 6 没有 所以我这样做 所以 我认为只有 IE6 和 7 才会导入外部 JavaScri
  • Mercurial自动更新问题

    我们开始使用 Mercurial 进行源代码控制 我们已将 HGRC 配置文件配置为在推送到 中央 存储库后自动更新 对于某些 PC 我们会收到以下错误消息 warning changegroup hook exited with stat
  • Magento 自定义模块,致命错误:调用成员函数 setFormAction()

    当我点击这个 url 上的模块时http localhost xxx index php TradeEnquiry我收到这个错误 致命错误 调用成员函数 setFormAction 对非对象进行 C wamp www stockdispla
  • 从 CSV Import 更新现有的 Access 记录,原生于 MS Access 或 VB.NET

    我是我所在组织的票务系统的应用程序管理员 我们正在添加一个新客户 需要将他们的客户记录导入到我们的系统中 然而 我们被拒绝从直接数据库连接中简单地获取这些记录 我们仅限于进入他们的票务系统 并将现有记录导出到 CSV 文件 为了在我们的系统
  • 如何(准确)估计剩余下载时间?

    当然 您可以将剩余文件大小除以当前下载速度 但如果您的下载速度波动 而且它会波动 这不会产生非常好的结果 有什么更好的算法可以产生更平滑的倒计时 An 指数移动平均线非常适合这个 它提供了一种平滑平均值的方法 以便每次添加新样本时 旧样本对
  • Java 8 原始流到集合的映射方法

    这两种流创建方法之间是否存在显着差异 在性能或最佳实践方面 int arr2 1 2 3 4 5 6 Arrays stream arr2 map in gt in 2 mapToObj in gt new Integer in colle
  • “原始字符串正则表达式”到底是什么以及如何使用它?

    来自 python 文档regex 关于 特点 解决方案是使用 Python 的原始字符串表示法来表示正则 表达模式 反斜杠不会以任何特殊方式处理 前缀为的字符串文字 r So r n 是一个两个字符的字符串 含有 and n while