regex - 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)
但我仍然得到同样的错误。有谁知道我在这里做错了什么?
解决方案
我设法通过将组选择更改为\2
而不是\1
.
事实证明,YAML 或 AutoModerator 会自动在整个表达式周围加上括号,因此其中的任何组引用都必须比您最初预期的多 1。
我一开始就认为这是问题所在,并尝试了上面解释的修复,但是由于 AutoModerator 代码的另一个问题,修复似乎没有奏效。现在一切都解决了;感谢您的耐心和帮助。
推荐阅读
- haskell - 我们自己的数据类型的最大值
- amazon-web-services - CodePipeline、CodeBuild、CloudFormation、Lambda:在单个构建中构建多个 lambda 并正确分配其代码
- c# - 我的图片框跟随光标,但光标未居中
- python-3.x - 使用 Python 修复文件名和更新引用
- angularjs - “http://localhost:4200”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- mysql - Laravel 中的查询构建器 GROUP BY、HAVING、COUNT
- javascript - 来自表格内部 html 的 php 的 javascript post 变量的 Ajax 调用
- time-series - 聚类“访问时间”数据序列
- linux-kernel - 如何在 eBPF 程序中获取任务的 cgroup 路径?
- android - 即使没有错误,应用程序也无法在某些设备上启动