2017-02-23 75 views
-1

假設我有兩個字符串,Helloheddo,如何創建正則表達式來匹配它們之間的差異?正則表達式:兩個字符串之間的計數差異

例如,在我的情況下,有三點不同,H現在是小寫h,並兩次l現在d

或者HelloText有三個差異,TXT

謝謝

+2

爲什麼單詞Hello和文本的字母E被認爲是區別? –

+1

恕我直言,這不能在一個正則表達式中完成。你必須用你喜歡的腳本語言編寫腳本。 – Toto

+0

使用正則表達式無法完成搜索編輯距離或對齊算法 –

回答

1

這絕對不是你應該使用的正則表達式做的(除非你有一個很好的理由是什麼?)。例如,這裏是一個Python解決方案。

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

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

你可以試試here

+0

什麼是.NET Linq等價物? –

+0

@ LukeTO'Brien不知道。也許是一個新問題的話題。 –

+1

這似乎工作https://dotnetfiddle.net/CplyFr - 我會接受你的答案 –

1

正則表達式爲Hello是:

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

,甚至指數等於下一個(奇數)項,此字符匹配。

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 - >匹配

如果這個表達式和結果是可以接受的,讓我知道,這個寫劇本。

創建慾望正則表達式:

var word = "Hello" ; 
 
var myregex = '^' ; 
 
for(i=0;i<word.length;i++){ 
 
\t 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){ 
 
\t if(mymatch[i]!==undefined){ 
 
    \t chars.push(mymatch[i]) ; 
 
    }else{ 
 
\t  mismatches++ 
 
    } 
 
} 
 
console.log(mismatches); //Count

相關問題