TL;DR:没有通用的解决方案,但对于相同的正则表达式,有比简单的(Python)字符串相等测试更好的方法吗?
阅读本文
answer
,我认为一般的解决方案在理论上是不可能的。
然而,我的工作
AutoKey
,一个Python应用程序,它将窗口的标题和/或类与多个正则表达式进行比较,以确定在特定触发器触发AutoKey时要执行的几个操作中的哪一个。看见
this
对于实际问题。
目前,当添加一个新操作时,将对照具有相同触发器的所有其他操作检查其关联的正则表达式。
现在使用的测试是两个正则表达式的简单字符串比较。如果它们相同,则不允许添加新操作。
大多数时候,这种非常弱的测试已经被证明是足够的,但如果失败,就会导致未定义的行为——(可能)发现匹配的第一个操作是在搜索顺序取决于实现的情况下使用的。
实践中使用的大多数正则表达式要么是纯常量文字字符串,如
kate.kate
或者类似的事情
.*app_title.*
和
.*ivaldi.*|.*brave.*
.只有当需要负窗口过滤器(以匹配所有窗口)时,它们才会变得奇怪
除了
那些拥有头衔的人
或
类与表达式匹配)。
那么,考虑到无法获得完美的解决方案,是否有一些折中的措施至少会比简单的平等测试更好?
有没有什么东西可以估计两个正则表达式不互斥的可能性,或者至少可以检测到像
.*string
相当于
.*.*string
写完这篇文章后,我想出了一个大
improvement
以纯粹经验启发的形式。
我仍然想知道是否有更优雅的解决方案/方法。
注意:我不是这方面的专家,所以任何建议的改进都必须非常简单地理解和实施,才能有用。