【问题标题】:Identify a string containing a single period with regex使用正则表达式识别包含单个句点的字符串
【发布时间】:2021-11-18 14:03:25
【问题描述】:

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

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

我目前正在使用:

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

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

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

【问题讨论】:

  • .co.uk这样的复杂顶级域名的URL呢?
  • 我不打算回答,我在手机上,无法测试,但[^\.]*表示0个或多个不是句点的字符,\.匹配单个点,所以我很确定 [^\.]*\.[^\.]* 会做你想做的事(只要字符串长度大于 1)
  • @VLAZ 感谢您的回复!我将添加一些带有多个句点的 URL 作为例外。这是最方便的方法。我可能不会全部击中,但我得到的越多越好。
  • @Flydog57 感谢您的回复!您所说的很有道理,不幸的是,您所写的内容也捕获了 IP 地址。我会玩弄它,看看我是否可以修改你建议的工作。
  • 使用Regex.IsMatch(text, @"^[^.]*\.[^.]*$")

标签: c# regex hyperlink ip


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这样的事情呢?

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多