Regex 模糊字符串匹配,可以;跳过;?e、 g.“;我是(.*)”;到“0”的距离为0;我在这里。”;

Regex 模糊字符串匹配,可以;跳过;?e、 g.“;我是(.*)”;到“0”的距离为0;我在这里。”;,regex,levenshtein-distance,fuzzy-search,Regex,Levenshtein Distance,Fuzzy Search,我正在写一个Python聊天机器人。无论采用何种技术(Levenshtein、LCS、regex等),我都需要一种模式,如我的名字是[a]。足够聪明,可以匹配如下字符串: My name is Tslmy. #Distance should = 0, and groupdict()['a'] outputs "Tslmy" My name is Tesla Tahomana. #Distance should = 0(!), and groupdict()['a

我正在写一个Python聊天机器人。无论采用何种技术(Levenshtein、LCS、regex等),我都需要一种模式,如
我的名字是[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 "
请允许我使用
groupdict()

  • 另一方面,我正在寻找一个带有省略/跳过/空白/忽略的“Levenshtein”,并选择已跳过的内容
  • 另一方面,我正在寻找一个对模式要求不那么严格的模糊(又称近似)正则表达式,它仍然提供良好的旧
    groupdict()
    ,以及一个“fuzziness”值(或“编辑距离”,需要确定“与字符串的最佳匹配模式”。
    这是首选解决方案,因为如果管理得当,它可以提供“足够的”
    groupdict()

    然而,TRE库和REGEX库(这是最接近的解决方案)似乎没有提供“模糊性”值。如果这个问题能够解决,那就更好了
可能吗?谢谢你的关注

更新:

我最终决定使用强大的模块,但仍然无法获得“模糊值”


由于这一页上的问题已经从理论上解决了,因此附加太多内容将是不光彩的。所以我提出,希望你们能解决

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

r"My name is (\w+){1,2}."
然后使用库来考虑变化。

DAT REGEX O_O (?:(?:(?:my | ym.)(?:my | ym))\s+(?:(?:…me | n.e | na.)(?:…me | n.e | na.)\s+(?:(?:is | si.)(?:is | si))\s+(\w[\w\s])\s

让我们把它分开:

  • (?i)
    :将
    i
    修饰符设置为不区分大小写
  • (?:(?:my | ym)。(?:my | ym))
    :这将匹配
    my,ym,my,ym,may,amy等。
  • \s+
    :将空格匹配一次或多次
  • (?:.?(?:…am | n.e | na.)(?:…am | n.e | na.)
    :匹配
    名称、naao、tame、lame、n99e、名称、NAAT等。
  • \s+
    :将空格匹配一次或多次
  • (?:(?:is | si)。?(?:is | si))
    :匹配
    is、si、ist、sit、siR等。
  • \s+
    :将空格匹配一次或多次
  • (\w[\w\s]*)
    :将单词和空格匹配一次或多次并将其分组(必须以单词
    \w
    开头)
  • \s*
    :将空格匹配零次或多次

< /P>你可以考虑使用DaMaO-LevsTein而不是普通的LevsTein,因为它会考虑“NaEM”与“名称”有1的距离而不是2,而不是帮助你解决问题。是的,我在生产中使用DL。为了简化这个问题,我只把它称为一个普通的Levenshtein。更重要的是,事实上,我并不真正关心模糊运算是什么。感谢您的提醒,因为它们会让那些不喜欢DL~的人感到高兴@icktoofayBTW,您可能希望转义最后的

[.]
\.
——否则,它将匹配任何字符,而不仅仅是它本身。Errrrr。。。请允许我问一下如何在Python代码中使用这个库?
python\setup.py.in
中的
win32\Release\tre.dll
似乎不存在。更新:在谷歌搜索之后,我发现这是一个更容易的选择。。。也许吧?我现在选择这个答案。我最终决定使用强大的模块,但仍然无法获得“模糊值”。由于这一页上的问题已经从理论上解决了,因此附加太多内容将是不光彩的。所以我提出,希望你们能解决!伙计,你要杀了我!~:)呵呵~你可以根据需要使用
[a-z]
而不是
\w
来改进它,因为
\w
也会匹配
\u
和digits抱歉,有很多这样的模式需要匹配,所以,我非常懒惰,无法管理它。顺便说一句,你一定花了一些时间来创作这个图案,对吧?@tslmy-Hmmm并没有真正提到时间,但我想大概是1000万。我想这取决于你对正则表达式的熟练程度,我几乎每天都在这里写正则表达式。顺便说一句,你给了我一个很好的主意,写一些东西来自动化这个正则表达式的编写过程。PHP中的一些东西来生成正则表达式,就像我在“打破正则表达式的法则”中所做的那样。你也可以使用这样的工具来编写可靠的正则表达式,这样就不那么痛苦了