【问题标题】:Minimization of the regex正则表达式的最小化
【发布时间】:2019-03-26 20:29:33
【问题描述】:

我对编程世界还很陌生。我正在尝试创建一个仅匹配给定字符串列表的通用正则表达式,仅此而已。

例如,给定以下列表

List = ['starguide,'snoreguide','snoraguide','smarguides']

它应该创建一个像这样的正则表达式 - s(((tar|nor(e|a))(guide))|marguides)

我实现了一个尝试。只能设法得到s(marguides|nor(aguide|eguide)|targuide)

我希望缩短我的正则表达式(常见的后缀捆绑在一起)。有没有更好的方法来缩短我从特里得到的正则表达式?

【问题讨论】:

  • 在 python 中轻松 peasy 'l'.join(mylist)
  • 查看自动机最小化算法
  • This post 包含您需要的所有详细信息和代码。复制/粘贴。
  • @WiktorStribiżew:我尝试实现你的代码,但它给出了s(marguides|nor(aguide|eguide)|targuide)
  • 你的目标是更短的正则表达式还是更快

标签: python regex string trie


【解决方案1】:

要获得所需的结果,请尝试使用自动最小化。

对于您的简单示例,确定性自动机就足够了。

使用 github.com/siddharthasahu/automata-from-regex 从琐碎的正则表达式(单词枚举)构建最小确定性状态机/自动机,然后将自动机转换为正则表达式(对于非循环自动机来说很容易,http://www-igm.univ-mlv.fr/~dr/thdr/ www. dcc.fc.up.pt/~nam/publica/extAbsCIAA05.pdf)另见https://cs.stackexchange.com/questions/2016/how-to-convert-finite-automata-to-regular-expressions

在一般情况下,非确定性自动机可以产生更短的正则表达式,但这是一个难题https://cstheory.stackexchange.com/questions/31630/how-can-one-actually-minimize-a-regular-expression

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2011-05-23
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多