【问题标题】:Regex Issue in C#C# 中的正则表达式问题
【发布时间】:2013-05-28 14:23:51
【问题描述】:

我正在尝试创建一个 C# 例程,该例程删除以下所有前缀和后缀并仅返回域的根词:

var stripChars = new List<string> { "http://", "https://", "www.", "ftp.", ".com",  ".net", ".org", ".info", ".co", ".me", ".mobi", ".us", ".biz" };

我用下面的代码来做这个:

originalDomain = stripChars.Aggregate(originalDomain, (current, repl) => Regex.Replace(current, repl, @"", RegexOptions.IgnoreCase));

这似乎适用于几乎所有情况。然而,今天我发现将“originalDomain”设置为“NameCheap.com”不会返回:

NameCheap

应该是这样,而是:

NCheap

谁能看看这个并告诉我出了什么问题?任何帮助将不胜感激。

【问题讨论】:

  • 我认为它与 .me .... 匹配 ame 有关。

标签: c# regex


【解决方案1】:

这很正常:正则表达式中的点表示任何字符。

因此,.me 匹配 NameCheap 中的 ame

用反斜杠转义点。

此外,您最好使用专用的 URI API 进行此类操作。

【讨论】:

  • 这是 Jay 下面提供的吗?
  • 是的,完全正确。 Java为此提供了URI。您应该使用它,因为它会为您解析 URI 并在每个场景中做正确的事情。您所要做的就是在主机部分工作。
【解决方案2】:

我知道这并不能直接回答您的问题,但考虑到您要完成的具体任务,我建议您尝试以下方法:

Uri uri = new Uri(originalDomain);
originalDomain = uri.Host;

编辑:

如果您的输入可能不包含方案,您可以使用 this post 中通知的 uri 构建器

var hostName = new UriBuilder(input).Host

希望这会有所帮助。

【讨论】:

  • 我遇到的问题是,有时域有 http://,有时是 ftp://,有时什么也没有。所以我需要一个捕捉所有的剥离。当我尝试使用上面的代码时,没有 http://,它给了我一个错误“无法确定 URI 的格式”。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2018-04-12
  • 2011-09-12
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多