python - 检查两个 Python 正则表达式模式是否等效

标签 python regex

我想在 re.VERBOSE 中写一个正则表达式模式,但我不确定我会在没有错误的情况下添加冗长的部分。

我记得,理论上,两个正则表达式的等价性(至少没有反向引用)可以通过生成它们的自动机并尝试找到图双射来找到。但是我看不到用于比较正则表达式的实例方法。

有没有办法生成正则表达式的自动机或直接比较它们,最好是与标准库进行比较?

(我已经为我的问题决定了一个不同的解决方案,但这仍然是我感兴趣的。)

最佳答案

您可以使用未记录的 re.DEBUG 功能:

>>> r1 = re.compile("foo[bar]baz", re.DEBUG)
literal 102
literal 111
literal 111
in
  literal 98
  literal 97
  literal 114
literal 98
literal 97
literal 122
>>> r2 = re.compile("""foo   # foo!
...                    [bar] # b or a or r!
...                    baz   # baz!""", re.VERBOSE|re.DEBUG)
literal 102
literal 111
literal 111
in
  literal 98
  literal 97
  literal 114
literal 98
literal 97
literal 122

如果输出相同,则 r1r2 也相同。

关于python - 检查两个 Python 正则表达式模式是否等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398251/

相关文章:

java - 零宽度正则表达式在 Java 中不匹配

regex - git存储库的正则表达式

python - 为什么调用 super().foo 和 super().__getattribute__ ("foo"之间有区别)

python - Pyaudio:将输入连接到输出时出错

python - 用随机数替换 Pandas 数据框中的唯一值

python - 在 Python 中使用正则表达式提取子字符串

python - python中使用正则表达式判断变量类型

python - 一次进行多个单独的 2d 旋转

python - 对自定义容器对象进行排序

regex - 正则表达式只匹配行尾的 X 个字符