正则表达式匹配单词的一部分

时间:2017-06-24 04:33:18

标签: regex nlp

是否可以匹配具有一定误差范围的单词模式。 例如,单词“Tike”,“Make”,“Bake”,“Tame”符合单词模式“Take”,带有一个拼写错误的字符。

1 个答案:

答案 0 :(得分:1)

Regexp对于这个问题不是一个非常可扩展的解决方案,但如果这真的是你想做的全部,那么使用带有多个备选方案的regexp(由|分隔),每个都有一个字符由点替换(.)通配符。

function makeMatcher(str) {
  const regexp = [...str].map((chr, i) => 
    `${str.slice(0, i)}.${str.slice(i+1)}`).join('|');
  console.log("regexp is", regexp);
  return new RegExp(regexp, "i");
}

function test(s) { console.log(s, matcher.test(s) ? "matches" : "does not match"); }

const matcher = makeMatcher("Mike");

["Mike", "Mila", "Mika", "John"].forEach(test);

您的问题是一般问题的一个子集,有时称为“模糊(或近似)字符串匹配”,您可以在存在一个或多个替换(您的情况),插入或移除的字符或转置字符时进行匹配。使用regexp肯定无法解决这个一般性问题。但你会发现很多图书馆都可以做到这一点。你可以从https://code.google.com/archive/p/google-diff-match-patch/开始。