java - 允许缺失字符的正则表达式

标签 java regex string

我正在尝试找到一种方法来确定字符串是否至少包含特定顺序的 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/

相关文章:

java - 使用 executeupdate 从 mysql 数据库中删除记录(netbeans)

r - 系统地用关联的 R 向量的第一个元素替换变量名的一部分

java - 查找从 Java 中的 .txt 文件读取的字符串的特定元素

java - Apache POI xls 文件错误

java - 意外的输入结束 : expected close marker for Object (start marker at [Source: {; line: 1, 列 : 1]) at [Source: {; line: 1, 列:3]

java - Android 如何在点击按钮时首先在日期选择器中显示年份

javascript - 将 HTML 句子拆分为单词(但保持内联 HTML 不变)

javascript - String.replace 正则表达式不会替换字符串中的 `*`

php - PHP 如何使用比较运算符比较字符串?

java - 返回随机字符串数组