Py学习  »  Python

有没有一种实用的方法来确定两个(Python)正则表达式是否(可能)互斥?

Joe • 2 年前 • 275 次点击  

TL;DR:没有通用的解决方案,但对于相同的正则表达式,有比简单的(Python)字符串相等测试更好的方法吗?

阅读本文 answer ,我认为一般的解决方案在理论上是不可能的。

然而,我的工作 AutoKey ,一个Python应用程序,它将窗口的标题和/或类与多个正则表达式进行比较,以确定在特定触发器触发AutoKey时要执行的几个操作中的哪一个。看见 this 对于实际问题。

目前,当添加一个新操作时,将对照具有相同触发器的所有其他操作检查其关联的正则表达式。

现在使用的测试是两个正则表达式的简单字符串比较。如果它们相同,则不允许添加新操作。

大多数时候,这种非常弱的测试已经被证明是足够的,但如果失败,就会导致未定义的行为——(可能)发现匹配的第一个操作是在搜索顺序取决于实现的情况下使用的。

实践中使用的大多数正则表达式要么是纯常量文字字符串,如 kate.kate 或者类似的事情 .*app_title.* .*ivaldi.*|.*brave.* .只有当需要负窗口过滤器(以匹配所有窗口)时,它们才会变得奇怪 除了 那些拥有头衔的人 类与表达式匹配)。

那么,考虑到无法获得完美的解决方案,是否有一些折中的措施至少会比简单的平等测试更好?

有没有什么东西可以估计两个正则表达式不互斥的可能性,或者至少可以检测到像 .*string 相当于 .*.*string

写完这篇文章后,我想出了一个大 improvement 以纯粹经验启发的形式。

我仍然想知道是否有更优雅的解决方案/方法。

注意:我不是这方面的专家,所以任何建议的改进都必须非常简单地理解和实施,才能有用。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/157579
 
275 次点击