是否可以计算正则表达式和字符串之间的编辑距离?

时间:2010-10-20 02:26:04

标签: regex distance levenshtein-distance

如果是,请解释如何。

Re:距离是什么 - “两个字符串之间的距离定义为将一个字符串转换为另一个字符串所需的最小编辑次数。”

例如,xyz到XYZ将进行3次编辑,因此字符串xYZ更接近XYZ和xyz。

如果模式是[0-9] {3}或例如123,那么a23将比ab3更接近模式。

如何找到正则表达式与非匹配字符串之间的最短距离?

以上是Damerau–Levenshtein距离算法。

2 个答案:

答案 0 :(得分:7)

您可以使用有限状态机有效地执行此操作(即,及时线性)。如果使用传感器,您甚至可以相当紧凑地编写转换规范,并进行比简单插入或删除更细致的转换 - 请参阅维基百科Finite State Transducer作为起点,以及软件,如FSA工具包或FSA6(也不完全稳定web-demo)。 FSA操作有很多库;我不想暗示前两个是你唯一或最好的选择,只有两个我听说过。

但是,如果您只想进行有效的近似搜索,则存在一个不太灵活但已经实现的选项:TRE,其中approximate matching function返回成本匹配 - 即从您的角度来看比赛的距离。

答案 1 :(得分:3)

如果你的意思是最接近的匹配字符串和样本之间的levenshtein距离最小的字符串,那么我很确定它可以完成,但你必须自己将正则表达式转换为DFA,然后尝试匹配和任何事情失败时,非确定性地继续,好像它已经过去并跟踪数字差异。你可以使用A *搜索或类似的东西,虽然(O(2 ^ n)最差的情况下)效率很低