我必须匹配的单词是“FFM_L_REEF_30”(单词的长度不固定)
我必须匹配的单词列表是
的 “FFM_H_REEF_40”
“FFM_H_REEF_50”
“FFM_L_REEF_20”
“FFM_L_RAEF_30”
是否可以编写一个正则表达式,它可以匹配只有一个字符差异的单词,如
“FFM_L_REEF_20” - 在此数字3中更改为2
“FFM_L_QEEF_30” - 在此字符中,R更改为Q
编辑问题
答案 0 :(得分:1)
答案 1 :(得分:0)
是的,当然。你可以使用下一个正则表达式:
a*.a*
这意味着您的字符串包含任意数量的' a',然后是任意符号,以及任何数量的' a'。
''指除了' \ n'之外的任何符号。如果您还希望字符串包含' \ n',您可以使用下一个正则表达式:
a*[\s\S]a*
答案 2 :(得分:0)
这是一个JS示例,说明如何使用Levenshtein算法解决它。
(请注意,getEditDistance
方法是从wikibooks复制的,其中有多种编程语言的实现。)
var testWord = "FFM_L_REEF_30",
wordList = [
"FFM_H_REEF_40",
"FFM_H_REEF_50",
"FFM_L_REEF_20",
"FFM_L_RAEF_30",
"A rendom sentence",
testWord,
"FFM_L_REEF_3"
],
w;
function getEditDistance(a, b) {
// Code from https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance
if (a.length === 0) return b.length;
if (b.length === 0) return a.length;
var matrix = [];
// increment along the first column of each row
var i;
for (i = 0; i <= b.length; i++) {
matrix[i] = [i];
}
// increment each column in the first row
var j;
for (j = 0; j <= a.length; j++) {
matrix[0][j] = j;
}
// Fill in the rest of the matrix
for (i = 1; i <= b.length; i++) {
for (j = 1; j <= a.length; j++) {
if (b.charAt(i - 1) == a.charAt(j - 1)) {
matrix[i][j] = matrix[i - 1][j - 1];
} else {
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
Math.min(matrix[i][j - 1] + 1, // insertion
matrix[i - 1][j] + 1)); // deletion
}
}
}
return matrix[b.length][a.length];
};
wordList.forEach(function (w) {
var ld = getEditDistance(w, testWord);
document.write('<p style="color:' + (ld>1?'red':'green') + ';">"' + w + '" gives levenshtein distance ' + ld + '</p>');
});
&#13;