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

Replace a specified string within a string which matches the regex pattern c#

我有一个包含以下字符串 URL 的多行文本框:

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

我想 replace/update 来自上述 URL 的字符串 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)$", "", RegexOptions.IgnoreCase);

提前致谢。

您可以利用字符串位于 的开头这一事实(即您应该使用 RegexOptions.Multiline 标志编译正则表达式),您不需要需要在此处检查 string/line 的结尾。此外,您需要围绕字符串的整个 non-fixed 部分设置分组结构。

如果您只需要处理行首的匹配项,请使用

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

如果你想处理字符串任意位置的匹配删除^| RegexOptions.Multiline使用

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

参见regex demo

细纹

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

您可以在取反字符class后加上\r\n以避免跨行溢出,即[^/] => [^/\r\n].