到目前为止我已经
了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
部分
为什么它不起作用?
由于
答案 0 :(得分:3)
(www|http|https)*?(com|.co.uk|.org)
表示www
或http
或https
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:
结尾的其他TLDmessageText1 = 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,它很酷”;