Python 正则表达式替代方案

时间:2021-03-03 08:51:09

标签: python regex

我正在尝试匹配以下语言:

L = {a^nb^m | (n+m) is even }

也就是说,n a 后跟 m b 以便 (n+m) 是偶数。我构建了以下正则表达式

((aa)*(bb)*)|(a(aa)*b(bb)*)

但它只匹配备选方案的第一部分,而不匹配第二部分(用 https://regex101.com/r/c5HucF/1/ 测试)。它不会匹配 aaabbb。当我删除第一个选择时,只留下 (a(aa)*b(bb)*),aaabbb 匹配得很好。我错过了什么?

1 个答案:

答案 0 :(得分:2)

看来这里的主要标准是 n+m 是偶数,因此您可以尝试:

^(?=(?:..)+$)a+b+$

查看在线demo

  • ^ - 起始字符串锚点。
  • (?= - 正向预测:
    • (?: - 非捕获组:
      • .. - 除换行符以外的任意两个字符。
      • )+$ - 关闭非捕获组并匹配 1+ 次直到结束字符串。
    • ) - 关闭正向前瞻。
  • a+b+ - 1+ 次“a”和 1+ 次“b”。
  • $ - 结束字符串锚点。

如果您希望将“bb”与“a^0”视为有效输入的位置相匹配,我想您可以将 + 中的 a+b+ 更改为 *。< /p>