【问题标题】:Detect flexible patterns?检测灵活模式?
【发布时间】:2014-08-19 20:58:20
【问题描述】:

我需要检测数据集中的灵活模式。例如这样的模式:

0{1},1{*},0{1}
(the number between { and } is how many times a number may occur)

这将匹配:

0,1,0
0,1,1,1,1,1,0

上面的还是很容易的,下面是更难的:

0{1},( 1{*} | 1{*},2{1},1{*} ),0{1}
(the | pipe character is a "or")

这将匹配:

0,1,0
0,1,1,1,1,1,0
0,1,2,1,0
0,1,1,1,1,1,2,1,0

我很难理解如何检测这些灵活的模式。

我的第一个想法是生成某种决策树,但是当模式变得更加复杂时,这将变得相当困难,尤其是因为您必须在这样的树中倒退并将路径标记为“不工作”并尝试其他路线。

这类问题有没有更好的解决方案?

[edit] 哎呀,我的问题可能过于简单了,小数字 0,1,2 在我的情况下不是数字,而是具有许多属性的对象。我的模式定义将匹配这些对象属性中的一个或组合。

【问题讨论】:

  • 你不能把你的模式改写成普通的正则表达式吗?
  • @svick ,我想我可能有过度简化的东西,模式包含诸如 (i>x && i

标签: regex algorithm artificial-intelligence decision-tree


【解决方案1】:

听起来您正在谈论构建正则表达式匹配器。每个正则表达式都可以表述为DFA。这是一个解释how的链接。

【讨论】:

  • 谢谢 Pradhan,我从来没有听说过 DFA,所以我首先要阅读一下这个主题。
猜你喜欢
  • 2010-09-16
  • 2022-01-23
  • 1970-01-01
  • 2013-01-17
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
相关资源
最近更新 更多