假设我有一个非常简单的正则表达式列表,表示为字符串(“非常简单”,我的意思是仅包含.*)。列表中的每个字符串均以.*开头和结尾。例如,我可能有

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/

10-10 13:41