如何使用Regex替换整个URL?

时间:2013-11-20 21:36:04

标签: c# regex

到目前为止我已经

messageText1 = Regex.Replace(messageText1, "(www|http|https)*?(com|.co.uk|.org)", "[URL OMITTED]");

只有www,没有bracks或http或https,它按预期工作

例如,输入Hey check out this site, www.google.com, it's really cool会输出hey check out this site, [URL OMITTED], it's really cool

但是,如果我在URL的开头放回或运算符,它只会替换输入的.com部分

为什么它不起作用?

由于

4 个答案:

答案 0 :(得分:3)

(www|http|https)*?(com|.co.uk|.org)

表示wwwhttphttps 0次,紧接着是com .co.uk.org。 所以它匹配例如httphttphttp.co.uk

您的意图可能只是在.之前获得*。这意味着它只查找(www|http|https)一次,然后它匹配.(任何字符)0到多次。

您还错过了.中的.com。但是,如果您想匹配文字.,则需要使用\.,因为.本身就意味着“任何字符”。

考虑到这一点,我认为你想要的正则表达式是:

(www|http|https).*?(\.com|\.co\.uk|\.org)

答案 1 :(得分:1)

您的表达在.或{可能更好'\S+

缺少 (www|http|https)\S*(com|\.co\.uk|\.org)
 Regex.Replace(messageText1, @"(www|http|https)\S*(com|\.co\.uk|\.org)", "[URL OMITTED]");

在C#中:

{{1}}

注意:你可能也希望逃避。's。

答案 2 :(得分:1)

这应该更好。它也适用于不以.com,.co.uk或.org:

结尾的其他TLD
messageText1 = Regex.Replace(messageText1, @"\b(?:http://|https://|www\.)\S+", "[URL OMITTED]");

答案 3 :(得分:0)

我尝试的一个简单版本如下。

messageText1 = Regex.Replace(messageText1,@“(www)?(。)?[a-z] *。(com)”,“[URL OMITTED]”);

我用

尝试了这个

string messageText1 =“嘿,看看这个,http:\ www.google.com,很酷”;

string messageText1 =“嘿,看看这个,www.google.com,很酷”;

string messageText1 =“嘿,请检查一下,google.com,它很酷”;