Skip to main content
 首页 » 编程设计

python之删除多余的正则表达式

2024年10月17日41yjmyzz

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

rs = [.*a.*, .*ab.*, .*ba.*cd.*, ...] 

我想做的是跟踪那些属于另一个模式的子集的模式。在此示例中,.*a.* 匹配 .*ab.* 所做的一切,甚至更多。因此,我认为后一种模式是多余的。

我想做的是拆分 .* 上的字符串,匹配相应的元素,并测试是否一个 startswith 另一个。更具体地说,考虑 .*a.* 和 .*ab.*。在 .*

上拆分这些
a = ['', 'a', ''] 
b = ['', 'ab', ''] 

和zip一起ping他们给出

c = [('', ''), ('a', 'ab'), ('', '')] 

然后,

all(elt[1].startswith(elt[0]) for elt in c) 

返回 True 所以我得出结论,如果 .*a.* 包含在列表中,则 .*ab.* 确实是多余的.

这是否有意义,是否符合我的要求?当然,由于多种原因,这种方法会变得复杂,所以我的下一个问题是,是否有任何人以前遇到过的更好的方法来做到这一点?

请您参考如下方法:

对于这个问题,您需要找到两个正则表达式的最小 DFA 并进行比较。
这是对同一问题的讨论的链接- How to tell if one regular expression matches a subset of another regular expression?