gpt4 book ai didi

python - 非固定长度的正则表达式负回顾

转载 作者:太空狗 更新时间:2023-10-29 21:37:17 24 4
gpt4 key购买 nike

作为document去:

This is called a negative lookbehind assertion. Similar to positive lookbehind assertions, the contained pattern must only match strings of some fixed length.

所以这会起作用,目的是匹配 {} 之外但不在 {} 内的任何 ,:

In [188]:

re.compile("(?<!\{)\,.").findall('a1,a2,a3,a4,{,a6}')
Out[188]:
[',a', ',a', ',a', ',{']

这将适用于稍微不同的查询:

In [189]:

re.compile("(?<!\{a5)\,.").findall('a1,a2,a3,a4,{a5,a6}')
#or this: re.compile("(?<!\{..)\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[189]:
[',a', ',a', ',a', ',{']
In [190]:

但如果查询是 'a1,a2,a3,a4,{_some_length_not_known_in_advance,a6}',根据文档,以下将无法按预期工作:

In [190]:

re.compile("(?<![\{.*])\,.").findall('a1,a2,a3,a4,{a5,a6}')
Out[190]:
[',a', ',a', ',a', ',{', ',a']

有什么替代方案可以实现这一目标?负面回顾是错误的做法吗?

这就是 lookbehind 最初设计的目的(仅匹配某些固定长度的字符串)的原因吗?

最佳答案

Any alternative to achieve this?

是的。有一个非常简单的技术,这种情况非常类似于"regex-match a pattern unless..."

这是您的简单正则表达式:

{[^}]*}|(,)

左边的 | 匹配完整的 { brackets } 标签。我们将忽略这些匹配项。右侧匹配并捕获第 1 组的逗号,我们知道它们是正确的逗号,因为它们与左侧的表达式不匹配。

这是一个执行多项任务的演示,因此您可以进行选择(请参阅 the demo) 底部的输出:

  1. 计算您要匹配的逗号(不是大括号之间的逗号)
  2. 显示匹配项(逗号...呃)
  3. 替换正确的逗号。这里我们用 SplitHere 替换,这样我们就可以执行任务 4...
  4. 以逗号分割,并显示分割后的字符串

引用

How to match (or replace) a pattern except in situations s1, s2, s3...

关于python - 非固定长度的正则表达式负回顾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com