【发布时间】:2017-11-30 16:55:06
【问题描述】:
我正在尝试找到一种方法来确定一个字符串是否包含至少 n 个特定顺序的字符。
我正在处理大量手写的数据,而且拼写错误非常多。
我需要在一个看起来像这样的大字符串中找到文本部分:
不相关的文字 MONKEY、CHIMP:更不相关的文字
我需要找到MONKEY,CHIMP:
这种输入错误的方式非常疯狂。这是一个更奇怪的例子:
猴子,CHIMP:
我已经在我的正则表达式中找到了能够找到所有这些事件的地方。可能不是最好的解决方案,但它是:
(m|M)(o|O)(n|N)(k|K)(e|E)(y|Y),?\s+(c|C)(h|H)(i|I)(m|M)(p|P)(\s+)?:
看起来有点奇怪,但确实有效。
不幸的是,怪异并不止于此。我需要修改这个正则表达式,以便它还允许每个单词中缺少 1 个字母。
所以我需要修改这个正则表达式,这样它也适用于:
猴子,CIMp:
onKEY,芯片:
onKEY , CIMp :
我认为应该有一种方法可以告诉正则表达式它应该需要 wordlength-1 确切的字符数才能匹配。
有没有简单的方法来做到这一点?
我一直在研究 {4, },但我不确定这是正确的方向,或者是否可以在这里应用。
提前致谢, 彼得
【问题讨论】:
-
如果您将文本标准化为小写,则可以使正则表达式更容易。
-
或者通过不区分大小写的匹配。见stackoverflow.com/questions/3436118/…
-
单独的正则表达式可能不足以实现可扩展的解决方案。您可能最终需要自己的解析器评估与字典单词的相似性,例如使用 Levenshtein 距离度量。
-
您是否考虑过使用比正则表达式更高级的算法?例如。 commons.apache.org/proper/commons-text/jacoco/…
-
这对正则表达式来说太可怕了(它太长了)。你应该改用Fuzzy text search。