我正在尝试找到一种方法来确定字符串是否至少包含特定顺序的 n 个字符。
我正在处理大量手写数据,打字错误的数量非常疯狂。
我需要在一个大字符串中查找文本部分,如下所示:
irrelevant text MONKEY, CHIMP: more irrelevant text
我需要找到猴子、黑猩猩:
这种错误输入的方式非常疯狂。这是一个额外奇怪的例子:
MonKEY , 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 个字母。
所以我需要修改这个正则表达式,以便它也适用于以下内容:
MonKEY , CIMp :
onKEY , ChIMp :
onKEY , CIMp :
我认为应该有一种方法告诉正则表达式它应该需要 wordlength-1 精确的字符数来匹配。
有没有简单的方法可以做到这一点?
我一直在研究 {4, },但我不确定这是正确的方向,或者是否可以应用于此处。
预先感谢, 彼得
最佳答案
使用纯正则表达式,那么你能做的最好的事情就是(添加空格以提高可读性):
/
^
(
monkey\s*,?\s*chimp\s*:
|
onkey\s*,?\s*chimp\s*:
|
mnkey\s*,?\s*chimp\s*:
|
...
)
$
/ix
但是,这是一种非常冗长的方法,并且仍然无法解释各种其他模糊匹配,例如 "Monkey, Chinp:"
或 "Monkey; Chimp: “
。
您可以采取的另一种方法是首先检查字符串的长度:
/^\w{10,15}$/
然后然后对其执行一些非常模糊的匹配:
/m?o?n?k?e?y?\s*,?\s*c?h?i?m?p?\s*:/i
但是,您需要小心,因为匹配列表中可能会包含一些奇怪的结果,例如:
"mon c:"
<小时/>
我建议采取不同的、非正则表达式的方法来利用 Levenshtein Distance图书馆。这将允许您设置“字符串需要与 Monkey, Chimp
匹配的紧密程度”的通用边界
关于java - 允许缺失字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783627/