假设我有一个字符串模板,例如,string="This is a {object}"现在我通过格式化这个字符串来创建两个(或更多)字符串,即string.format(object="car")=>"This is a car"string.format(object="2020-06-05 16:06:30")=>"This is a 2020-06-05 16:06:30"现在我以某种方式丢失了原始字符串。有没有办法使用我现在拥有的 2 个新字符串找出原始字符串?注意:我有这些字符串的数据集,这些字符串是从模板创建的,但由于编辑而丢失了原始模板。新字符串是从新模板创建的,并放入同一数据集中。我尝试过使用一些基于 ML 的方法,但它似乎在一般情况下不起作用。我正在寻找一种可以返回原始字符串的算法,它可以是一个或一组字符串,以防模板已多次更改。
3 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
一种可能是匹配输入字符串中的单词和格式化值选项,然后进行比较:
import re
def get_vals(s):
return re.findall('[\d\-]+\s[\d:]+|\w+', s)
vals = ["This is a car", "This is a 2020-06-05 16:06:30"]
r = ' '.join('{object}' if len(set(i)) > 1 else i[0] for i in zip(*map(get_vals, vals)))
输出:
'This is a {object}'
明月笑刀无情
TA贡献1828条经验 获得超4个赞
您可以找到模板的位置,但无法理解模板中的名称,因此通过区分两个字符串之间的差异,您可以了解模板化字符串的位置。
查看Python - 仅获取字符串之间的差异以获取有关如何获取两个字符串之间差异的建议。
以下一些步骤可以作为您的起点:
获取字符串 A 和 B 之间的差异作为列表,仅收集来自 A 的字符串。
初始化模板 = A
遍历不同的字符串并在模板中替换它们以
{}
在 处,您将拥有来自 A 的模板字符串。
临摹微笑
TA贡献1982条经验 获得超2个赞
您可以使用主要用于比对 DNA 序列的许多“序列比对”算法之一。这将返回保存的字符串序列。然后你会保留保护区并添加占位符,其中发生“突变”以获得模板。
https://en.wikipedia.org/wiki/Multiple_sequence_alignment会让你开始。
- 3 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消