【问题标题】:Get Regex.Matches to start the match at Position 0获取 Regex.Matches 在位置 0 开始匹配
【发布时间】:2018-05-31 14:29:49
【问题描述】:

我正在尝试使用正则表达式来计算某个字符串出现在另一个逗号分隔的字符串中的次数。

我正在使用Regex.Matches(comma-separated string, certain string).Count 来获取号码。我唯一的问题是,如果它在字符串的开头排列,我希望它简单地算作匹配。

例如,如果我有逗号分隔的字符串

string comma_separated = "dog,cat,bird,blackdog,dog(1)"; 

并想查看搜索字符串与逗号分隔字符串的内容匹配多少次

string search = "dog";

我用:

int count = Regex.Matches(comma_separated, search).Count;

我希望它是 2,因为它与

匹配

,cat,bird,blackdog,(1)”,

但是它返回一个 3,因为它也与 blackdog 的 dog 部分匹配。

有什么方法可以让它仅在识别从字符串开头开始的匹配时才算作匹配?还是我只是错误地使用了正则表达式?

【问题讨论】:

  • Regex 似乎是适合这里工作的错误工具。您可以用逗号分隔字符串,然后按以“dog”开头的结果过滤结果,然后计算出现次数。
  • @zzzzBov 是的,我想知道,谢谢!
  • [^,]dog 之类的呢? - 单词 dog 之前的行首或逗号?
  • @zzzzBov 这种方法的问题是它还计算字符串“doggggg”
  • @Kishore,鉴于问题的详细信息,这听起来很合适。

标签: c# regex


【解决方案1】:

正如 cmets 中所述,正则表达式可能不是您实现所需结果的最合乎逻辑的方式。但是,如果您想使用正则表达式来查找匹配项,则类似这样的内容会提供您想要的结果

(?<=,|^)dog

这将执行“正向向后查找”以确保单词“dog”前面有一个逗号或位于您正在搜索的字符串的开头。

更多关于正则表达式环视的信息:https://www.regular-expressions.info/lookaround.html

【讨论】:

    【解决方案2】:
      string comma_separated = "dog,cat,bird,blackdog,dog(1)";
      int count = Regex.Matches(comma_separated, string.Format(@"\b{0}\b", Regex.Escape("dog")), RegexOptions.IgnoreCase).Count;
    

    通过将 \b 附加到文本的任一侧,您可以在文本中找到“EXACT”匹配项。

    【讨论】:

      【解决方案3】:

      尝试使用此模式:search = @"\bdog";\b 匹配单词边界。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多