【发布时间】: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 的扩展方法)。
【问题讨论】: