假设我有两个字符串,Hello
和heddo
,如何创建正则表达式以匹配它们之间的差异?
例如,在我的情况下有三个不同之处,H
现在是小写h
,而l
现在是d
。
或Hello
和Text
有三个不同之处,T
X
和T
谢谢
答案 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