首页 > 解决方案 > Python 正则表达式错误:“无法引用开放组”

问题描述

我正在为 reddit 自动版主创建规则。它从 YAML 配置文件中获取规则,并将正则表达式解释为 Python 正则表达式。

我正在尝试使以下正则表达式起作用:

(https?://[\\w\\d:#@%/;$()~_?+-=\\.&]+\\.\\w{2,6})([\\S\\s]*\\1)

当我在https://pythex.org/上对其进行测试时,它可以完美地实现我想要的。

不幸的是,当我将相同的正则表达式复制到配置文件中时,表达式末尾的组引用导致错误:

生成了一个无效的正则表达式body (regex):不能引用一个开放的组

我也试过这个版本,所有的东西都被转义了,只是为了确保角色不会以任何方式干扰:

(https?://[\\w\\d\\:\\#\\@\\%\\/\\;\\$\\(\\)\\~\\_\\?\\+\\-\\=\\.&]+\\.\\w{2,6})([\\S\\s]*\\1)

但我仍然得到同样的错误。有谁知道我在这里做错了什么?

标签: regexregex-group

解决方案


我设法通过将组选择更改为\2而不是\1.

事实证明,YAML 或 AutoModerator 会自动在整个表达式周围加上括号,因此其中的任何组引用都必须比您最初预期的多 1。

我一开始就认为这是问题所在,并尝试了上面解释的修复,但是由于 AutoModerator 代码的另一个问题,修复似乎没有奏效。现在一切都解决了;感谢您的耐心和帮助。


推荐阅读