【问题标题】:How to Combine Arbitrary Regexes with AND如何将任意正则表达式与 AND 结合
【发布时间】:2014-03-10 04:41:00
【问题描述】:

有没有将正则表达式组合在一起的通用方法?

在编写一个欧拉问题的解决方案时,我的代码最终执行如下:

List<String> expressions; //There are 50 regex expr in this list

List<Regex> regexes = new List<Regex>();

foreach (String expr in expressions)
{
    regexes.add(new Regex(expr, RegexOptions.Compiled));
}

foreach (String line in File.ReadAllLines(...))
{
    bool matches = true;

    foreach (Regex regex in regexes)
    {
        if (!regex.isMatch(line))
        {
            matches = false;
            break;
        }
    }

    if (matches)
    {
        Console.WriteLine("This line matches all of the regexes: ");
        Console.WriteLine(line);
        break;
    }
}

上述方法效率低下,因为它扫描文件中的每一行 50 次。

我想创建一个仅当所有 50 个正则表达式都匹配该字符串时才匹配该行的正则表达式。这样每行只扫描一次(希望不匹配的行会因为更严格的正则表达式而更早失败)。

(我不在乎它们在哪里匹配,我只需要知道它们是否匹配)。

从我的一些 CS 课程中,我似乎记得通过为每个正则表达式生成 DFA 然后将它们相交来手动学习如何做到这一点。

那么,C# 是否有一种内置方法可以将任意正则表达式与 AND 组合?

如果不是,我怎样才能通过创建一个新的正则表达式来实现相同的结果? (更好的是 Regex 的扩展方法)。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    好吧,正如我对 .NET 中正则表达式的理解。您可能没有解决方案来处理两个正则表达式。但是,我想出了:

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2011-06-23
      • 2014-02-25
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多