如何将任意正则与AND结合起来

时间:2014-03-10 04:41:01

标签: c# regex

是否存在将正则表达式组合在一起的通用方法?

在编写其中一个Euler问题的解决方案时,我的代码最终表现如下:

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组合?

如果没有,如何通过基于ANDing两个正则表创建一个新的正则表达式来实现相同的结果? (更好的是Regex的扩展方法)。

1 个答案:

答案 0 :(得分:0)

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