为什么我的正则表达式与 r'string' 匹配,但使用 Python 时不匹配 'string'?

2023-11-27

正则表达式在 Python 中的工作方式是如此令人费解,以至于每一秒都让我更加愤怒。这是我的问题:

我知道这给出了一个结果:

re.search(r'\bmi\b', 'grand rapids, mi 49505)

虽然这没有:

re.search('\bmi\b', 'grand rapids, mi 49505)

没关系。我明白了这么多。现在,我有一个正在生成的正则表达式,如下所示:

regex = '|'.join(['\b' + str(state) + '\b' for state in states])

如果我现在这样做re.search(regex, 'grand rapids, mi 49505'),它失败的原因与我的第二个相同search()例子失败了。

我的问题:有什么办法可以做我想做的事吗?


答案本身

regex = '|'.join([r'\b' + str(state) + r'\b' for state in states])

这背后的原因是“r”前缀告诉Python不要分析你传递给它的字符串。如果你不在字符串前添加“r”,Python 会尝试将“\”前面的任何字符转换为特殊字符,以允许你输入换行符 (\n)、制表符 (\t) 等容易地。

当你这样做时'\b',你告诉 Python 创建一个字符串,分析它,并将 '\b' 转换为 'backspace',而当你这样做时r'\b',Python 只需存储“\”,然后存储“b”,这就是您想要的正则表达式。始终使用“r”作为正则表达式模式的字符串。

“r”表示法称为“原始字符串”,但这是一种误导,因为 Python 内部不存在原始字符串这样的东西。只需将其视为告诉 Python 避免过于聪明的一种方式即可。

Python u'string',这告诉 Python 将字符串存储为 unicode。您可以将两者结合起来:ur"é\n"会将“\bé”存储为 unicode,而u"é\n"将存储“é”,然后换行。

改进代码的一些方法:

regex = '|'.join(r'\b' + str(state) + r'\b' for state in states)

删除了多余的[]。它告诉 Python 不要将正在生成的值列表存储在内存中。我们可以在这里执行此操作,因为我们不打算重复使用您正在创建的列表,因为您直接在您的join()没有其他地方。

regex = '|'.join(r'\b%s\b' % state for state in states)

这将自动处理字符串转换,并且更短、更清晰。当您在 Python 中格式化字符串时,请考虑% 操作员.

如果 states 包含州邮政编码列表,则应存储为字符串,而不是 int。在这种情况下,您可以跳过类型转换并进一步缩短它:

regex = r'\b%s\b' % r'\b|\b'.join(states)

最终,您可能根本不需要正则表达式。如果您只关心检查邮政编码之一是否在给定字符串中,则可以使用in(检查某个项目是否在可迭代对象中,就像字符串是否在列表中一样):

matches = [s for s in states if s in 'grand rapids, mi 49505']

遗言

我理解您在学习新语言时可能会感到沮丧,但请花点时间为您的问题提供适当的标题。在本网站中,标题应以问号结尾,并给出有关问题的具体细节。

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

为什么我的正则表达式与 r'string' 匹配,但使用 Python 时不匹配 'string'? 的相关文章

  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 此 TypeError 消息中提到的“代码对象”是什么?

    在尝试使用Python时exec声明 我收到以下错误 TypeError exec arg 1 must be a string file or code object 我不想传递字符串或文件 但什么是代码对象 如何创建一个 创建代码对象的
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 使用python查找txt文件中字母出现的次数

    我需要从 txt 文件中读取该字母并打印 txt 文件中出现的次数 到目前为止 我已经能够在一行中打印内容 但计数有问题 有人可以指导吗 infile open grades txt content infile read for char
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • 按边距(“全部”)值列对 Pandas 数据透视表进行排序

    我试图根据 pandas 数据透视表中的行总和对最后一列 边距 aggrfunc 进行降序排序 我知道我在这里错过了一些简单的东西 但我无法弄清楚 数据框 数据透视表 WIDGETS DATE 2 1 16 2 2 16 2 3 16 Al
  • 无法在 selenium 和 requests 之间传递 cookie,以便使用后者进行抓取

    我用 python 结合 selenium 编写了一个脚本来登录网站 然后从driver to requests这样我就可以继续使用requests进行进一步的活动 I used item soup select one div class
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 在Python上获取字典的前x个元素

    我是Python的新手 所以我尝试用Python获取字典的前50个元素 我有一本字典 它按值降序排列 k 0 l 0 for k in len dict d l 1 if l lt 51 print dict 举个小例子 dict d m
  • Python Anaconda:如何测试更新的库是否与我现有的代码兼容?

    我在 Windows 7 机器上使用 Python 2 7 Anaconda 安装进行数据分析和科学计算 当新的库发布时 例如新版本的 pandas patsy 等 您建议我如何测试新版本与现有代码的兼容性 是否可以在同一台机器上安装两个
  • Plotly:如何检查基本图形结构(版本 4)

    对于旧版本的plotly 例如在 Jupyterlab 中 您可以简单地运行figure像这样检查你的图形的基础知识 Ouput data marker color red size 10 symbol 104 mode markers l
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • pandas 相当于 np.where

    np where具有向量化 if else 的语义 类似于 Apache Spark 的when otherwise数据帧方法 我知道我可以使用np where on pandas Series but pandas通常定义自己的 API
  • Ubuntu systemd 自定义服务因 python 脚本而失败

    希望获得有关 Ubuntu 中的 systemd 守护进程服务的一些帮助 我写了一个 python 脚本来禁用 Dell XPS 上的触摸屏 这更像是一个问题 而不是一个有用的功能 该脚本可以工作 但我不想一直启动它 这就是为什么我想到编写
  • 在Raspberry pi上升级skimage版本

    我已经使用 Raspberry Pi 2 上的 synaptic 包管理器安装了 python 包 然而 skimage 模块版本 0 6 是 synaptic 中最新的可用版本 有人可以指导我如何将其升级到0 11 因为旧版本中缺少某些功
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐

  • 如何在MySQL中从DATETIME中分离DATE和TIME?

    我正在存储一个DATETIME表中的字段 每个值看起来都像这样 2012 09 09 06 57 12 我正在使用这个语法 date Y m d H i s 现在我的问题是 在获取数据时 如何同时获取日期和时间分别地 使用单个 MySQL
  • 使用 JavaScript 打印多个 PDF 文件

    我想知道如何通过一次打印点击打印多个 PDF 文件 我可以轻松打印单个 PDF 文件 但当文件较多时我不知道如何打印 提前致谢 您可以致电print 在代码中多次出现 导致文件被一个接一个地打印 function PrintAll var
  • 为什么像“volatile int * p”这样的指向易失性的指针有用?

    volatile就是告诉编译器不要优化引用 这样每次读 写都不会使用寄存器中存储的值 而是进行真正的内存访问 我可以理解它对于某些普通变量很有用 但不明白如何volatile影响指针 volatile int p some addr int
  • 如何将 Bullet 物理应用于绘制的 Opengl 3d 形状

    我只是想知道是否有一种方法可以将子弹物理应用于 opengl 绘制的对象 使用 glVertex3f 或带有 glVertexAttribPointer 的三角形网格创建 我目前正在使用 jogl 和 jbullet 将物理应用到我的 3D
  • 尝试播放声音时出现“play() 失败,因为用户没有先与文档交互”错误 (javascript/html)

    我正在尝试使用 javascript 在网页上播放声音 但每当我这样做时 我都会收到上述错误 这是我的代码 if thing startsWith 0 var a new Audio audio mp4 a play 此外 如果您打开控制台
  • 如何设置 Elastic beanstalk Windows 应用程序的文件夹权限?

    我目前正在构建一个 C WebApi 2 应用程序 我将其上传到 Amazon Elastic Beanstalk 实例进行部署 到目前为止 我取得了成功 并且在我的本地计算机上 我刚刚完成了文件上传功能的测试 以便客户端上传图像 它的方式
  • 在 VirtualBox 来宾中运行 perf

    我的教授要求我跑步 perf stat e mem loads mem stores test 为了让我找到 C 文件的内存加载和存储 我在 VirtualBox Linux 来宾中执行此操作 问题是perf说这是无效或不受支持的事件 任何
  • 在 Clion 中启用 Cuda 代码索引

    我正在使用 Clion 开发 cuda 程序 当扩展名是 h 时 代码突出显示可以正常工作 但是 当它更改为 cuh 时 Clion 仅将新文件视为纯文本文件 并且我无法启用代码突出显示 我知道完整的 Cuda 工具链是不可能的 所以我不希
  • 为 Outlook 2007 构建表单

    我刚刚了解到 Outlook 表单的概念 我不知道这是否能解决我的问题 但这就是我想做的 我希望能够让公司内部的员工填写一些表格 那么我所要做的就是创建表单并将其推送到他们的 Outlook 中 他们填写表格后 我可以以某种方式捕获数据吗
  • WebAPI OData $格式转换为xml

    对于我的 WebAPI OData 应用程序 我试图让我的客户端 浏览器 决定数据输出应该采用什么格式 作为 format尚未在 WebAPI OData 中实现 我在这里使用 Raghuramn 的示例 https gist github
  • React + Typescript:如何输入 event.target.name 来声明?

    我有一些反应状态被定义为一个接口并且有专门命名的键 我尝试了下面的解决方案 该解决方案在技术上应该基于状态键工作 但它仍然给我错误 x string string provides no match for the signature 做这
  • 有没有一种简单的方法可以使用 Microsoft Web Optimization 框架/脚本捆绑来呈现绝对 URL?

    我正在尝试使用 Microsoft 的 Web Optimization 框架呈现 JavaScript 包 如下所示 Scripts Render assets bundle js 并构建一个小包 如下所示 public static v
  • Fabric API 密钥无效

    我正在尝试将 Fabric 安装到我的 iOS 应用程序中 我下载了 Fabric 应用程序来安装 Crashlytics 但是当我在应用程序提供的构建阶段添加运行脚本时 在构建项目后出现错误 第 2 行 1 myfirebaseid io
  • 在 PowerShell 代码中测试文件夹是否是连接点?

    如何在 PowerShell 代码中测试文件夹是否是连接点 至少从 PowerShell v5 0 开始 对链接有了更好的支持 或者 MS 称之为 重新分析点 改进的 Item cmdlet LinkType财产 链接的文章位于 WMF 5
  • 如何访问未导出的结构体字段

    Go 1 8 中有没有办法使用 Reflect 来访问未导出的字段 这似乎不再有效 https stackoverflow com a 17982725 555493 注意reflect DeepEqual工作得很好 也就是说 它可以访问未
  • 禁用对读取(无效 JSON)单引号字符串的支持

    Newtonsoft Json for C 支持读取类似内容 key value 但这是不正确的 JSON 是否可以禁用它 以便它更像 PHP 一样解析和读取 其中 PHP 不支持 key value 但 key value 你可以自己写J
  • 编译所需的BLAS和LAPACK库

    我最近下载了 Gnu Octave 的最新稳定版本 并尝试在我的机器上构建并安装它 Ubuntu 10 0 4 LTS 64 位 当我运行 configure 时 我收到以下错误消息 configure error You are requ
  • Scala @ 运算符

    Scala 的 运算符有什么作用 例如 在博客文章中Scala 中的形式语言处理 第 2 部分有这样的东西 case x Some Nil gt x 它使人们能够将匹配的模式绑定到变量 例如 考虑以下情况 val o Option Int
  • 如何将 stringstream 内容放入 char 而不是 string 类型?

    大家都知道stringstream str 需要一个字符串变量类型来存储内容stringstream str 进去 我想存储的内容stringstream str 转换为 char 变量或 char 数组或指针 可以这样做吗 请写一个简单的
  • 为什么我的正则表达式与 r'string' 匹配,但使用 Python 时不匹配 'string'?

    正则表达式在 Python 中的工作方式是如此令人费解 以至于每一秒都让我更加愤怒 这是我的问题 我知道这给出了一个结果 re search r bmi b grand rapids mi 49505 虽然这没有 re search bmi