2015-11-10 49 views
-3

我需要更換文本的表達式,如下例所示:正則表達式 - 通過鏈路替換代碼

種皮M123456 TESTB 結果=種皮www.test.com TESTB

這字符串whith 1個字符M後跟6個數字,表示要由超鏈接替換的代碼。

請幫助我,用正則表達式來解決這個問題

+0

我忘了回答你,但感謝。該解決方案正常工作 –

回答

3

這應該這樣做

string Result = Regex.Replace("estA M123456 testB", "M[0-9]{6}", "www.test.com"); 

模式是M[0-9]{6} - 一個接着6位

0

您可以使用自定義MMatchEvaluator根據數量來翻譯鏈接,如下所示:

private static Dictionary<int, string> knownLinks = new Dictionary<int, string>() 
{ 
    {123456, "www.test.com"}, 
    {999999, "www.foo.com"}, 
}; 

private static string LinkReplacer(Match match) 
{ 
    int linkNumber = Convert.ToInt32(match.Groups[1].Value); 
    string link = knownLinks[linkNumber]; 
    return link; 
} 

public static void Replace() 
{ 
    string text = "testA M123456 testB Result M999999 testC"; 
    string replacedText = Regex.Replace(text, "M([0-9]{6})", LinkReplacer); 

    Console.WriteLine(replacedText); 
} 


// output: testA www.test.com testB Result www.foo.com testC 

幾點說明:

  • 我們首先創建一個LinkReplacer功能,它告訴我們如何來查找鏈接,一個給定數。然後,我們將LinkReplacer函數傳遞給Regex.Replace以用作MatchEvaluator。這意味着Regex.Replace現在會將每個找到的實例轉發給該方法,並從那裏檢索替換字符串。
  • 模式M([0-9]{6})中的()括號告訴Regex這是一個「Group」。在LinkReplacer中,您可以看到我們然後訪問該組以檢索內容。 (我們也可以刪除整個比賽的第一個字母,總是一個'M'。)
  • 該字典僅供參考,我假設你有一個數據庫來檢索正確的鏈接。
  • 示例文本有點長,可以測試所有的事件是否被替換,而不僅僅是第一次,並且替換字符串是分別計算的。

欲瞭解更多信息:https://msdn.microsoft.com/en-us/library/ht1sxswy(v=vs.110).aspx

+0

對不起,我忘了回答。該解決方案正常工作......謝謝 –