使用正则表达式识别包含单个句点的字符串

Identify a string containing a single period with regex

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

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

我目前正在使用:

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

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

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

由于您使用 C# 进行编码,因此在此处使用非正则表达式方法很有意义(请参阅 ):

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

如果你必须用正则表达式来做,你可以使用

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

regex demo详情:

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

在 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.");
}

这样的事情怎么样?

[^\s\.]+\.{1}[^\s\.]+

所以一个点周围除了一个点和一个空格之外的任何东西的否定集。