2012-11-06 75 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)
  • 你并不需要检查匹配进行替换之前成功的,除非你有其他的逻辑取决于比赛是否成功。