替换字符串中与正则表达式模式匹配的指定字符串c#

时间:2018-03-06 11:18:40

标签: c# regex replace pattern-matching regex-group

我有一个多行文字框,其中包含以下字符串网址:

gitlab-ci.yml

我想从上面的网址http://foodfacts.ambigouos.com http://articles.ambigouos.com http://www.dirtshirt.org 中替换/更新字符串http to https,其中ambigouos.com为使用Regex的域名。

预期输出:

https://foodfacts.ambigouos.com
https://articles.ambigouos.com
http://www.dirtshirt.org

以下代码已尝试但无效:

multilinebox.text = Regex.Replace(multilinebox.text, @"^http?://[a-zA-Z]*(\.ambigouos\.com)$", "$1", RegexOptions.IgnoreCase);

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以利用字符串位于行的开头的事实(即您应该使用RegexOptions.Multiline标志编译正则表达式),您不需要检查结束这里的字符串/行。此外,您需要围绕字符串的整个非固定部分设置分组构造。

如果您只需要在一行开头处理匹配,请使用

Regex.Replace(multilinebox.text, @"^http://((?:[^/]*\.)?ambigouos\.com)", "https://$1", 
     RegexOptions.IgnoreCase | RegexOptions.Multiline);

如果您想在字符串中的任何地方处理匹配 ,请删除^| RegexOptions.Multiline使用

Regex.Replace(multilinebox.text, 
          @"http://((?:[^/]*\.)?ambigouos\.com)", 
          "https://$1", 
          RegexOptions.IgnoreCase);

请参阅regex demo

<强> Detasils

  • ^ - 开始一行(自使用RegexOptions.Multiline起)
  • http:// - 文字子字符串
  • ((?:[^/]*\.)?ambigouos\.com) - 捕获第1组:
    • (?:[^/]*\.)? - 除/以外的任何0+字符的可选序列,然后是.
    • ambigouos\.com - 一个文字子字符串。

您可以将\r\n添加到否定字符类,以避免跨行溢出,即[^/] =&gt; [^/\r\n]