2012-11-06 73 views
1

我想用正則表達式在url列表中找到確切的url。找到確切的url匹配

   string url = @"http://web/P02/Draw/V/Service.svc"; 
       string myword = @"http://web/P02/Draw/V/Service.svc http://web/P02/Draw/V/Service.svc?wsdl"; 
       string pattern = @"(^|\s)" + url + @"(\s|$)"; 
       Match match = Regex.Match(pattern, myword); 
       if (match.Success) 
       { 
        myword = Regex.Replace(myword, pattern, "pattern"); 
       } 

但是模式沒有返回結果。

您認爲是什麼問題?

+0

爲什麼不按空格分割'myword'然後用linq來選擇它? –

+2

你不需要正則表達式來找到完全匹配。 string.Contains()將工作得很好。 – Hardrada

+0

但是不會檢查兩邊是否有空間。 – Rawling

回答

1

您將錯誤的參數傳遞給Regex.Match方法。您需要交換參數,像這樣>

Match match = Regex.Match(myword,pattern); 
1

爲什麼不能對字符串集合(在按空格分裂)

myword.Split(' ').Where(x => x.Equals(url)).Single().Replace(url, "pattern"); 
+0

這甚至不是必需的。憑藉現有的或不存在的,僅使用Replace將無需首先檢查字符串的存在即可工作。話雖如此,我投票贊成建議使用equals和replace,而不是用一個不必要的正則表達式來處理它。 – Hardrada

+0

你說得對,簡單的替換就足夠了。但也許他想知道是否會有替代行動。 –

2

奇怪的格式一邊使用Linq,這裏是匹配的每個網址模式在你的清單中。

Pattern = "http://([a-zA-Z]|/|[0-9])*\.svc"; 

坦率地說,我認爲你沒有語法或實現方面的問題。如果你想調整我寫了上面的表達,這是做到這一點的地方:Online RegEx Tool

+0

RePierre的論點也適用 - 顯然你確實有句法問題。 – ProfessorY

0
  • 你有你的論點圍繞錯誤的方式,如已經指出
  • .在正則表達式模式是一個特殊字符,所以你需要,當你使用它來構建模式逃脫url - 您可以使用Regex.Escape(url)
  • 你並不需要檢查匹配進行替換之前成功的,除非你有其他的邏輯取決於比賽是否成功。