[英]Compounding some arbitrary Regexes (Or, are many small Regexes better than one big one)
[英]How to Combine Arbitrary Regexes with AND
是否有將正則表達式組合在一起的通用方法?
在編碼其中一個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組合的內置方法?
如果不是,我如何通過將兩個正則表達式基於AND一起創建一個新的正則表達式來達到相同的結果? (最好是Regex的擴展方法)。
好吧,據我對.NET中Regex的理解。 對於兩個正則表達式,您可能沒有解決方案。 但是,我想出了:
Lookup <TKey,TElement>數據結構 。 這里的鍵是您的正則表達式列表的集合,而元素是您的字符串的集合。 我認為這將比您的搜索效率更高。
您想出了自己的狀態機。 正則表達式如何轉換為狀態機
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.