2015-05-13 17 views
1

逃生繩的部分用字符在C#中我有一個字符串,如這樣的:使用正則表達式

/one/two/three-four/five six seven/eight/nine ten eleven-twelve 

我需要先用空格代替破折號,然後能夠逃脫有任何單詞分組以「#」符號它們之間的空間,所以上面的字符串應該是:

/one/two/#three four#/#five six seven#/eight/#nine ten eleven twelve# 

我有以下的擴展方法,這對於兩個詞的偉大工程,但我怎樣才能讓它在任何數量的單詞的工作。

public static string QueryEscape(this string str) 
    { 
     str = str.Replace("-", " "); 
     return Regex.Replace(str, @"(\w*) (\w*)", new MatchEvaluator(EscapeMatch)); 
    } 

private static string EscapeMatch(Match match) 
    { 
     return string.Format("#{0}#", match.Value); 
    } 

所以我想我真的需要使用合適的正則表達式,考慮到幫助那些

  1. 可能有任意數量的空格
  2. 有可能會或可能不會是一個尾部斜槓(」 /「)
  3. 考慮到單詞被分組在斜線之間,除了上面的#2之外。
  4. 破折號是非法的,需要替換爲空格

預先感謝您對我們的支持。

回答

0

這應該爲你工作:

public static string QueryEscape(this string str) 
{ 
    return Regex.Replace(str.Replace("-", " "), @"[^/]*(\s[^/]*)+", "#$&#"); 
} 

基本想法是匹配文本的跨度是不是包含在其中的(塗白)空格字符斜線。然後在比賽周圍添加英鎊符號。