【问题标题】:How to use \K for regex in python? [duplicate]如何在 python 中使用 \K 进行正则表达式? [复制]
【发布时间】:2019-12-29 12:55:07
【问题描述】:

\K 表示重置匹配的开始,这在不支持复杂的后视时非常有用(即,它不允许 + 和 * 用于后视)。它很好地满足了我的需求,但是,当我尝试在 python 中使用它时,它报告bad escape \K。以下是我的python代码:

re.sub(r'\[\n[ ]+\d+, ?\n[ ]+\K\d+(?=, ?\n[ ]+(?:true|false)\n[ ]+\])', '__table1.column__', content)

【问题讨论】:

  • 您可以使用捕获组(\[\n[ ]+\d+, ?\n[ ]+)\d+(, ?\n[ ]+(?:true|false)\n[ ]+\]) 并在替换regex101.com/r/s0yvJr/1 中使用\1__table1.column__\2
  • @TheFourthBird 你应该省略\2\K 的意思只是“从这里开始匹配”。
  • @tripleee 我认为 OP 想用__table1.column__ 替换两种模式之间的数字。使用\K 时,它看起来像regex101.com/r/vX8bIX/1 如果我省略\2,它将与原始模式中的前瞻逻辑不匹配。
  • 啊,我的错,我错过了你如何从前瞻比赛切换到常规比赛。
  • 您可能应该将此作为答案发布;你的比目前提出的两个答案都好。

标签: python regex python-3.x


【解决方案1】:

您可以改用 2 个捕获组:

(\[\n[ ]+\d+, ?\n[ ]+)\d+(, ?\n[ ]+(?:true|false)\n[ ]+\])

Python demo | Regex demo

在替换使用中:

\1__table1.column__\2

例如

re.sub(
    r'(\[\n[ ]+\d+, ?\n[ ]+)\d+(, ?\n[ ]+(?:true|false)\n[ ]+\])',
    r'\1__table1.column__\2',
    content
)

【讨论】:

  • 谢谢!这对我来说非常有效。所以我猜python中的正则表达式没有直接支持\K?
  • 不是直接的,但是你可以使用 DeepSpace 回答的正则表达式模块。
  • 如果这解决了您的问题,请考虑将其标记为已接受。另见help.
【解决方案2】:

您可以使用支持它的regex 模块。

【讨论】:

  • 所以,如果我使用这个正则表达式库,可以使用 \K
猜你喜欢
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 2014-02-24
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多