从字符串列表生成正则表达式

时间:2018-04-24 10:54:18

标签: c++ data-structures

原始问题:

我正在阅读regex格式的内容,扩展它并将其写出来。这份清单在写出来时会变得很大。

在写出来的时候,我没有原始的正则表达式数据。所以,我将不得不从我拥有的字符串中创建正则表达式。

阅读和写作时的几个案例:

说,读正则表达式是:

abc/*

由于'abc'只能有'A','B','C','D'(请跟我这个列表),上面会被翻译成字符串列表

"abc/A", "abc/B", "abc/C", "abc/D" -- 1

说,另一个读正则表达式是:

def/*/A

因为'def'只能有'x','y','x'(有这个列表,我),上面会被翻译成字符串列表

"def/x/A", "def/x/A", "def/x/A" -- 2

我已经说过我现在没有原始正则表达式。我所拥有的只是字符串列表。我将不得不从1号和2号语句中创建正则表达式。

从1号开始,我应该

 abc/*

从2号开始,我应该

 def/*/A

是原作。

问题:哪种数据结构可以有效解决此问题。我曾想过尝试使用try& Aho-Corasick算法但到目前为止还无法得到明确的解决方案。

如果不清楚,我会很乐意扩大这个问题。请注意*不会匹配/,//或除字符之外的任何内容。

1 个答案:

答案 0 :(得分:1)

这是一个难以解决的问题。

很好的解决方案:

步骤1:将字符串列表转换为有限自动化。正如我所提到的,我将使用Aho-Corasick算法'这样做。

第2步:将有限自动化转换为正则表达式......如下所示:https://cs.stackexchange.com/questions/2016/how-to-convert-finite-automata-to-regular-expressions