【发布时间】: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