使用反向引用不可能实现向后查找

2023-11-26

据我了解,

(.)(?<!\1)

永远不应该匹配。其实php的preg_replace甚至拒绝编译这个,ruby 也是如此gsub。蟒蛇re模块似乎有不同的意见:

import re
test = 'xAAAAAyBBBBz'
print (re.sub(r'(.)(?<!\1)', r'(\g<0>)', test))

Result:

(x)AAAA(A)(y)BBB(B)(z)

谁能为这种行为提供合理的解释?

Update

这种行为似乎是一个限制 in the re模块。另一种选择regex模块似乎正确处理断言中的组:

import regex

test = 'xAAAAAyBBBBz'

print (regex.sub(r'(.)(?<!\1)', r'(\g<0>)', test))
## xAAAAAyBBBBz

print (regex.sub(r'(.)(.)(?<!\1)', r'(\g<0>)', test))
## (xA)AAA(Ay)BBB(Bz)

请注意,与pcre, regex还允许可变宽度的lookbehinds:

print (regex.sub(r'(.)(?<![A-Z]+)', r'(\g<0>)', test))
## (x)AAAAA(y)BBBB(z)

最终,regex将被包含在标准库中,如中所述PEP 411.


这看起来确实像是 Python 中的一个限制(“bug”的好说法,正如我从与 Microsoft 的支持电话中了解到的那样)re模块。

我想这与Python不支持可变长度后行断言有关,但它还不够聪明,无法弄清楚这一点\1将始终是固定长度的。为什么它在编译正则表达式时不抱怨这一点,我不能说。

有趣的是:

>>> print (re.sub(r'.(?<!\0)', r'(\g<0>)', test))
(x)(A)(A)(A)(A)(A)(y)(B)(B)(B)(B)(z)
>>>
>>> re.compile(r'(.*)(?<!\1)') # This should trigger an error but doesn't!
<_sre.SRE_Pattern object at 0x00000000026A89C0>

因此,最好不要在 Python 的后向断言中使用反向引用。正向前瞻也好不了多少(它也在这里匹配,就好像它是正向前瞻):

>>> print (re.sub(r'(.)(?<=\1)', r'(\g<0>)', test))
x(A)(A)(A)(A)Ay(B)(B)(B)Bz

我什至无法猜测这里发生了什么:

>>> print (re.sub(r'(.+)(?<=\1)', r'(\g<0>)', test))
x(AA)(A)(A)Ay(BB)(B)Bz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用反向引用不可能实现向后查找 的相关文章

  • pip 安装失败,SSL 证书验证失败 (_ssl.c:833)

    我无法通过 pip install 安装任何外部 python 模块 我已经正确安装了 python 但如果我使用 pip install 它会显示此错误 这是我运行后的代码pip install pytesseract C Users 1
  • Python sqlite3参数化删除表

    我在 python 中删除 sqlite3 表时遇到问题 我正在使用标准sqlite3模块 self conn sqlite3 connect sql drop table self conn execute sql u table nam
  • 小数缓存是Python规范中定义的还是一个实现细节?

    Python 似乎有一个所谓的 小数字缓存 用于存储 5 到 256 范围内的数字 我们可以使用以下程序来演示这一点 for i in range 7 258 if id i id i 0 print i is cached else pr
  • PyTorch:加速数据加载

    我正在使用 dendnet121 从 Kaggle 数据集进行猫 狗检测 我启用了cuda 看起来训练速度非常快 然而 数据加载 或者可能是处理 似乎非常慢 有一些方法可以加快速度吗 我尝试玩女巫批量大小 但没有提供太多帮助 我还将 num
  • Seaborn 热图中的自定义调色板间隔

    我正在尝试绘制一个heatmap https seaborn pydata org generated seaborn heatmap html使用seaborn库 绘图函数如下所示 def plot confusion matrix da
  • python 脚本中 os.system 的 256 和 512 响应代码是什么

    当我在 python 中使用 os system ping 服务器时 我得到多个响应代码 使用的命令 os system ping q c 30 s SERVERANME 0 在线 256 离线 512 512 是什么意思 Per the
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • ( 后的正则表达式匹配数

    我正在尝试使用正则表达式来匹配开括号 字符后的可变长度的数字 我努力了 d 但该正则表达式在匹配中包含括号 我该如何排除它 我正在使用 Sublime Text 正则表达式引擎来进行匹配 您可以使用积极的后视 http www regula
  • 如何仅替换多个文件中记事本++中的第一个文本实例?

    我正在努力更新一个网站并进行一些更改 并且我已经成功使用标准查找和替换搜索对多个文件进行了大部分更改 我的 f r 中只留下一个错误需要修复 但它在整个文档中出现了几次 我只想替换第一个实例 这是唯一一次错误 div class boxb
  • 是否有更矢量化的方法来沿轴执行 numpy.outer ?

    gt gt gt x np array a0 a1 b0 b1 gt gt gt y np array x0 x1 y0 y1 gt gt gt iterable np outer x i y i for i in xrange x sha
  • 使用 3d 对象作为 3d 散点图中的标记 - Python

    使用下面的代码 我尝试模拟一个用罐头制成的碗 我希望每个标记都是一个罐头 最好的方法是什么 我真的很感激任何建议 谢谢 import pylab import numpy as np from math import pi sin cos
  • 如何删除 pandas 数据框中的唯一行?

    我遇到了一个看似简单的问题 在 pandas 数据框中删除唯一的行 基本上 相反drop duplicates https pandas pydata org pandas docs stable generated pandas Data
  • 如何在数据框中绘制包含三列的无向图,形成 3 种不同类型的节点(三方)?

    我正在尝试使用三个不同的列表绘制网络的可视化 这三个列表形成 3 种类型的节点 下面的代码正在运行 如图所示 需要两个列表 用户 ID 评分 但是 我希望我的图表是三部分的 即 user userId review ratings prod
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • 如何修改 contenteditable 元素的innerHTML

    我使用 Selenium 与 Chrome driver 和 python3 6 来测试网站 我在网页中有代码片段如下 div class 3F6QL 2WovP div class 39LWd Type a message div div
  • 如何使用 pygame.mixer 重复音乐?

    我创建了以下使用 pygame mixer 播放 mp3 音乐的代码 然而 音乐不会重复 有什么想法可以让音乐重复播放吗 这是代码 playlist list playlist append put music here mp3 playl
  • 删除 .htaccess 中 URL 中各处的多组斜杠

    我目前有一个网站 访客可以访问每个网址 并使用任意数量的斜杠来分隔文件夹名称 例如 如果 URL 应该是 http example com one two three four 然后用户可以通过以下任意方式访问同一页面 http examp
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后

随机推荐

  • JSON 响应字符串中的取消转义字符

    我发出了一个 JSON 请求 它给了我一个使用的字符串Unicode 字符代码看起来像 s u003Cp u003E 我想将其转换为 s p 在 Python 中执行此操作的最佳方法是什么 请注意 这是同一个问题this one 仅适用于除
  • html 表 colspan 未按预期工作

    HTML 概念有时是如此糟糕 这是我在 html 表中使用 colspan 的代码 看起来并不像我预期的那样 table border 1 tr td a td tr tr td b td td c td tr table 我想要的是 ce
  • VBA 宏运行时错误 6:循环内编码溢出

    遇到此错误的问题 我正在创建一个 GA 循环是将我的适应度值分配给一个数组 一些变量 Dim Chromolength as integer Chromolength varchromolength aVariables Dim i as
  • OpenGL帧缓冲区:可以清除它,但不能绘制它

    在 Mac 上 我有一个 OpenGL 设置 除了帧缓冲区外 它工作得很好 纹理工作等 所以我知道纹理已启用 我有一个有效的上下文 等等 所有工作都完美无缺 直到我尝试创建一个帧缓冲区 我使用 glGenFramebuffers glBin
  • GWT 2.0 的硒测试

    如何使 selenium click 的工作方式与手动鼠标单击相同 我最近将 GWT 从 1 7 1 升级到 2 0 一些 selenium 测试 SeleniumRC v1 0 1 IE7 现在失败 看来 Selenium click 方
  • 泛型方法可以使用逆变/协变类型吗?

    我正在编写一个通用方法 以在 T4 模板的特殊任务中使用它 该方法应该允许我使用通用接口中的专用类型 我考虑了以下签名 interface IGreatInterface Object aMethodAlpha u U parameter
  • WPF 用户控件父级

    我有一个用户控件 我将其加载到MainWindow在运行时 我无法从包含窗口获取句柄UserControl 我努力了this Parent 但它始终为空 有谁知道如何从 WPF 中的用户控件获取包含窗口的句柄 以下是控件的加载方式 priv
  • 递归和记忆

    我有一个程序 通过递归传递大量数据 比如 1000 个变量 递归至少会运行 50 或 60 次 我担心的是 由于空间不足 数据是否有可能被覆盖在内存位置上 或者如果没有内存 我会得到一些异常 即程序内存已经用完了 我没有收到这样的错误 是否
  • 将对象数组从js传递到rails

    我正在尝试将对象数组从 js 传递到 Rails data test test asdas ajax url evaluate json data data success function data dataType json Rails
  • 错误:mscorlib.dll 中发生“System.UnauthorizedAccessException”类型的未处理异常

    这是当我尝试将文件复制到某个位置时崩溃并给出此错误的部分 string startupDirectory C Users Tyler AppData Roaming Microsoft Windows Start Menu Programs
  • Eclipse 标记出现次数并不标记所有出现次数

    刚刚安装了 Eclipse Juno Release 构建 ID 20120614 1722 我打开了 标记出现次数 我可以看到它确实标记了我正在编辑的 JS 文件中的一些出现次数 但是 有一个函数调用没有标记 var trackView
  • 使用python设置固定长度

    我的 str 类似于 60 或 100 我需要 str 为 00060 和 00100 我怎样才能做到这一点 代码是这样的 我使用 0 0 0 作为插头 现在需要修复 d 0006000100 a4 60 a5 100 d 0 0 0 a4
  • 情感分析 - wordNet , SentiWordNet 词典

    我需要一个包含积极和消极词语的列表weights根据单词的强度和周数来分配单词 我有 1 WordNet 它为每个单词给出 或 分数 2 SentiWordNet 给出 0 1 范围内的正值和负值 我用几句话检查了这些 love wordN
  • 哪些文件可能包含 OS X 终端的 PATH 声明?

    所以我在 OS X Leopard 上遇到了路径问题 看来 OS X 正在添加我没有说明的其他路径 并且它扰乱了我的路径优先级 我只有一个 bash login文件 我没有 bashrc或 profile 文件 我的 bash login文
  • 如何在 Ruby On Rails 中重定向到上一页?

    我有一个页面列出了所有具有可排序标题和分页的项目 path projects order asc page 3 sort code 我选择编辑其中一个项目 path projects 436 edit 当我单击该页面上的 保存 时 它会调用
  • 在 WiX 中使用防火墙扩展

    我正在尝试编写一个使用 WiX 防火墙扩展的 WiX 脚本 但它似乎找不到扩展 dll 我认为 我看到的错误是这样的 File 元素包含未处理的扩展元素 fire FirewallException 请确保 http schemas mic
  • 使用 ggplot 将图例中的所有图层包含在图例中

    我怎样才能制作一个代表我的图表中绘制的所有曲线的图例 目前 为第一层生成自动图例 基于 颜色 美学 但另一层 表示所有观察中 价格 变量的密度的黑色曲线 不包含在该图例中 我认为我的问题肯定来自对 ggplot 包背后的概念的不完整理解 g
  • 跳过 R 中的特定行和列

    我使用以下命令跳过了第二行数据 Df read csv IMDB data csv header T sep 2 这背后的解释是什么 它可以用于跳过 1 个以上的特定行吗 它可以用于跳过列吗 请帮忙 您可以使用负值 跳过 尽可能多的行 即
  • 在 Twitter Bootstrap 上切换复选框

    我用 Twitter Bootstrap 制作了一组复选框 现在我想做一个 全选 或 取消全选 按钮 我如何使用 JS 函数来做到这一点 Twitter Bootstrap 文档说使用 button toggle 但它不起作用 这是我的代码
  • 使用反向引用不可能实现向后查找

    据我了解 test Result x AAAA A y BBB B z 谁能为这种行为提供合理的解释 Update 这种行为似乎是一个限制 in the re模块 另一种选择regex模块似乎正确处理断言中的组 import regex t