可以"跳过"的模糊字符串匹配?例如"我是(.*)." 与"我在这里"的距离为0.

tsl*_*lmy 7 regex fuzzy-search levenshtein-distance

我正在写一个Python聊天机器人.无论技术是什么(Levenshtein,LCS,正则表达式等),我想要一个像My name is [ A ].智能足够的模式来匹配字符串,如:

My name is Tslmy.              #Distance should = 0, and groupdict()['a'] outputs "Tslmy"
My name is Tesla Tahomana.     #Distance should = 0(!), and groupdict()['a'] outputs "Tesla Tahomana"
my  naem ist tslmy .           #With a little typo, the distance = 5, and groupdict()['a'] outputs "tslmy "
Run Code Online (Sandbox Code Playgroud)

请允许我用来groupdict()['a']指代[ A ](实际上(?P<identifier>match))抓住的东西.

  • 换句话说,我正在寻找一个带有省略/跳过/空白/忽略的"Levenshtein",并挑选出已被跳过的内容.
  • 换句话说,我正在寻找一个模糊(也就是近似)正则表达式,它可以对模式不那么严格,仍然提供良好的旧groupdict(),以及"模糊"值(或"编辑距离",需要确定"与字符串"稍后"匹配的最佳模式.
    这是首选解决方案,因为groupdict()如果管理良好,它提供"足够" .
    然而,TRE库和REGEX库被发现是最接近的解决方案,似乎没有提供"模糊"值.如果这可以解决,那就更好了!

那可能吗?感谢您的关注.

更新:

我决定最终使用强大的正则表达式模块,但仍然无法获得"模糊值".

由于这个页面上的问题是理论上解决的,所以进一步追加将是不光彩的.所以我提出了另一个关于这个新问题的问题,希望你能解决它!

joe*_*l.d 1

您可以使用正则表达式进行基本匹配:

r"My name is (\w+){1,2}."
Run Code Online (Sandbox Code Playgroud)

然后使用TRE库来允许变化。