【问题标题】:How to replace entire URL using Regex? [duplicate]如何使用正则表达式替换整个 URL? [复制]
【发布时间】:2013-12-05 03:06:10
【问题描述】:

目前为止

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

只有 www,没有括号或 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 的开头放回 or 运算符,它只会替换输入的 .com 部分

为什么它不起作用?

谢谢

【问题讨论】:

    标签: c# regex


    【解决方案1】:
    (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)
    

    【讨论】:

    • 很好,它有效。将在 6 分钟内接受答案,谢谢!
    • 太棒了,没问题
    【解决方案2】:

    这应该会更好。它也适用于不以 .com、.co.uk 或 .org 结尾的其他 TLD:

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

    【讨论】:

    • \b 不是必需的。 \S+ 将始终停在 \b 点上。
    • 感谢更新此内容,以便它可以与 https 一起使用
    【解决方案3】:

    您的表达式在某处缺少. 或(可能更好)\S+

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

    在 C# 中:

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

    注意:您可能也想转义 .。

    【讨论】:

    • 它告诉我 \S 是一个无法识别的转义序列
    • @ÁppleAssassin11 可能需要转义反斜杠,因为它在字符串中:"(www|http|https)\\S*(com|.co.uk|.org)"
    【解决方案4】:

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

    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,很酷";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2016-11-12
      • 2020-01-03
      • 1970-01-01
      相关资源
      最近更新 更多