假设我有一个非常简单的正则表达式列表,表示为字符串(“非常简单”,我的意思是仅包含.*
)。列表中的每个字符串均以.*
开头和结尾。例如,我可能有
rs = [.*a.*, .*ab.*, .*ba.*cd.*, ...]
我想做的是跟踪那些模式的另一个模式。在此示例中,
.*a.*
匹配.*ab.*
做的所有事情,以及更多。因此,我认为后一种模式是多余的。我想做的是在
.*
上拆分字符串,匹配相应的元素,然后测试一个startswith
另一个。更具体地说,考虑.*a.*
和.*ab.*
。在.*
上拆分这些a = ['', 'a', '']
b = ['', 'ab', '']
然后将它们一起
zip
c = [('', ''), ('a', 'ab'), ('', '')]
然后,
all(elt[1].startswith(elt[0]) for elt in c)
返回
True
,因此我得出结论,如果.*ab.*
包含在列表中,则.*a.*
确实是多余的。这有意义吗,是否可以做我想做的事情?当然,这种方法由于多种原因而变得复杂,因此我的下一个问题是,有没有更好的方法来做到这一点?
最佳答案
对于此问题,您需要找到两个正则表达式的最小DFA并进行比较。
这是讨论相同问题的链接-
How to tell if one regular expression matches a subset of another regular expression?
关于python - 删除多余的正则表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41022990/