原始问题:
我正在阅读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算法但到目前为止还无法得到明确的解决方案。
如果不清楚,我会很乐意扩大这个问题。请注意*不会匹配/,//或除字符之外的任何内容。
答案 0 :(得分:1)
这是一个难以解决的问题。
很好的解决方案:
步骤1:将字符串列表转换为有限自动化。正如我所提到的,我将使用Aho-Corasick算法'这样做。
第2步:将有限自动化转换为正则表达式......如下所示:https://cs.stackexchange.com/questions/2016/how-to-convert-finite-automata-to-regular-expressions