簡體   English   中英

如何將任意正則表達式與AND結合

[英]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的理解。 對於兩個正則表達式,您可能沒有解決方案。 但是,我想出了:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM