gpt4 book ai didi

python - 正则表达式:可选不工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:11 25 4
gpt4 key购买 nike

我是正则表达式的新手。我找到了解决以下问题的方法,但我想知道为什么我的第一个代码段不起作用:

假设我想匹配 (Python) 正则表达式 c[a]c[b]c(这是 MWE,实际上 a、b、c 代表更复杂的模式)。

我想通了:

截图无效:

^(\[(a)?|(b)?\])?c$

这是匹配 c,但匹配 [a]c[b]c

如果我删除外部可选组 \[(a)?|(b)?\]c$,它匹配 [a]z[b]z 但不是c

可以理解

我可以通过以下方式解决这个问题:

工作片段:

^(\[a\])|(\[b\])?c$

谁能解释一下为什么这个最新的有效而第一个无效?

最佳答案

你应该有 grouped ab 选项:

^(\[(?:(a)|(b))\])?c$
^^^ ^

参见 regex demo .如果不这样做,[只匹配a之前,]只匹配b之后.并且您的正则表达式匹配 [acb]c]c[c 字符串,请参阅 your regex demo和图表:

enter image description here

请参阅下面固定的正则表达式详细信息:

  • ^ - 字符串的开始
  • ( - 第一个捕获组的开始:
    • \[ - 文字 [
    • (?: - 非捕获组的开始:
      • (a) - 匹配 a
      • 的捕获组
      • | - 或者
      • (b) - 匹配 b
      • 的捕获组
    • ) - 非捕获组结束
  • \] - ]
  • )? - 第一个捕获组结束,? 使其匹配 1 次或 0 次
  • c - c
  • $ - 字符串结尾。

一个固定的正则表达式图:

enter image description here

附言这些图表生成于 https://jex.im/regulex .

关于python - 正则表达式:可选不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425918/

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