首页 > 解决方案 > 使用正则表达式识别包含单个句点的字符串

问题描述

我正在尝试编写一个正则表达式操作,该操作将简单地识别字符串中是否只有一个句点。

例如,它会识别arandomlink.onlinea@second#random-link.fr,但它不会识别具有多个句点的 IPV4 IP 地址,例如5.6.7.8

我目前正在使用:

string URLpattern = @"\w*\.\w";

但上面的代码标识了我不想要的 IP 地址。

有人有什么想法吗?这可能是一个非常简单的方程式,但现在我还没有想到。我不知道如何将等式限制为仅识别字符串中的一个句点,而不是多个句点。因为我正在使用 Hash 和其他东西,所以最好用单个句点来标识 URL。

标签: c#regexhyperlinkip

解决方案


由于您使用 C# 进行编码,因此在此处使用非正则表达式方法是有意义的(请参阅Klaus Gütter 的评论):

var ContainsOnlyOneDot = text.Count(c => c == '.') == 1;

如果您必须使用正则表达式执行此操作,您可以使用

^[^.]*\.[^.]*$

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • [^.]*- 零个或多个字符.
  • \.- 一个点
  • [^.]*- 零个或多个字符以外的.字符
  • $- 字符串结束。

在 C# 中,您可以使用

if (Regex.IsMatch(text, @"^[^.]*\.[^.]*$"))
{
    Console.WriteLine("The string contains one dot only.");
}
else
{
    Console.WriteLine("The string contains no dots or more than one dot.");
}

推荐阅读