假设有许多已知是由单个模板生成的文本(例如,许多 HTML 页面,由某种数据库中的数据支持的模板呈现)。一个非常简单的例子:
id:937 name=alice;
id:28 name=bob;
id:925931 name=charlie;
仅给定这 3 个文本,我想获得如下所示的原始模板:
"id:" + $1 + " name=" + $2 + ";"
以及与此模板一起使用的 3 组字符串:
- $1 =
937
, $2 =alice
- $1 =
28
, $2 =bob
- $1 =
925931
, $3 =charlie
换句话说,“模板”是所有给定文本中遇到的公共子序列的列表,总是以一定的顺序出现,除了这些子序列之外的所有其他内容都应该被视为“数据”。
我猜一般算法将与任何 LCS(最长公共子序列)算法非常相似,尽管使用不同的回溯代码,它会以某种方式将“模板”(所有给定文本的通用字符)和“数据字符串”(不同字符)分开。
额外的问题:有现成的解决方案吗?