正则表达式:计算两个字符串之间的差异

时间:2017-02-23 11:25:09

标签: regex string

假设我有两个字符串,Helloheddo,如何创建正则表达式以匹配它们之间的差异?

例如,在我的情况下有三个不同之处,H现在是小写h,而l现在是d

HelloText有三个不同之处,T XT

谢谢

2 个答案:

答案 0 :(得分:1)

这绝对不是你应该用Regexes做的事情(除非你有充分的理由吗?)。例如,这是Python的解决方案。

def count_diff(a,b):
    return sum(x!=y for x,y in zip(a,b))

print(count_diff('Hello', 'hebdo'))

您可以尝试here

答案 1 :(得分:1)

Hello的正则表达式是:

 ^((H)|.)?((e)|.)?((l)|.)?((l)|.)?((o)|.)?$

即使index等于next(odd)项,也匹配此字符。

 Match 1
 Full match 0-5 `Hello`
 Group 1.   0-1 `H`
 Group 2.   0-1 `H`
 Group 3.   1-2 `e`
 Group 4.   1-2 `e`
 Group 5.   2-3 `l`
 Group 6.   2-3 `l`
 Group 7.   3-4 `l`
 Group 8.   3-4 `l`
 Group 9.   4-5 `o`
 Group 10.  4-5 `o`

 Full match 0-5 `Heddo`
 Group 1.   0-1 `H`
 Group 2.   0-1 `H`
 Group 3.   1-2 `e`
 Group 4.   1-2 `e`
 Group 5.   2-5 `ddo`
 Group 7.   5-5 ``
 Group 9.   5-5 ``

或检查奇数项目,Group2,4,6,8 != null - >匹配

如果此REGEX和结果可以接受,请告诉我并为此编写脚本。

创建欲望正则表达式:

var word = "Hello" ;
var myregex = '^' ;
for(i=0;i<word.length;i++){
	myregex += '(('+word.substr(i,1)+')|.)?';
}
myregex += '$';

// Use Regex to find matched Characters and Differences:

var mymatch = "Heddo".match(new RegExp(myregex)) ;
mymatch.splice(0,1);
var mismatches = 0 ;
var chars = [];
for(i=1;i<mymatch.length;i+=2){
	if(mymatch[i]!==undefined){
    	chars.push(mymatch[i]) ;
    }else{
	    mismatches++
    }
}
console.log(mismatches); //Count