首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要regex代码来匹配一个字符差异的单词。

需要regex代码来匹配一个字符差异的单词。
EN

Stack Overflow用户
提问于 2016-12-21 07:46:51
回答 2查看 68关注 0票数 1

我必须匹配的单词是"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

问题编辑

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-21 09:17:17

下面是一个JS示例,说明如何使用Levenshtein算法来解决这个问题。

(请注意,getEditDistance方法是从维基百科复制的,其中有多种编程语言的实现)。

代码语言:javascript
复制
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>');

});

票数 0
EN

Stack Overflow用户

发布于 2016-12-21 07:52:47

尝试一下下面的正则表达式。

代码语言:javascript
复制
^(?:(.)\1*(?:(?!\1).)\1*|(.)(?:(?!\2)(.))\3*$)$

演示

请告诉我上述正则表达式失败的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41257613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档