簡體   English   中英

LINQPad與 .NET正則表達式性能不匹配

[英]LINQPad Vs. .NET Regex Performance Mismatch

全部,我有一系列SQL語句,用'GO'分隔string (不區分大小寫,因此'Go','go'等也是有效的)。 如果我有這樣的聲明

string str = "INSERT INTO People \r\n" + 
                "VALUES (3, 'Gandalf', 'The Gray'); \r\nGO\r\n" + 
             "INSERT INTO People \r\n" + 
                "VALUES (4, 'Legolas', 'Camus'); \r\nGO";

我想避免在“ Legolas”中的“ go”上出現比賽。 為此,我在LINQPad中設計了一個正向表達式,同時具有負向超前正向 超前

string str = "INSERT INTO People \r\n" + 
                "VALUES (3, 'Gandalf', 'The Gray'); \r\nGO\r\n" + 
             "INSERT INTO People \r\n" + 
                "VALUES (4, 'Legolas', 'Camus'); \r\nGO";
Regex regGo = new Regex(@"(?<=\b)(?i)GO(?!\w+)");
MatchCollection matches = regGo.Matches(str);
foreach (Match m in matches)
{
    m.Dump();
}

這是我想要的,也就是說,當它是一個新的“ GO”時,它僅與一個“ GO”(無論如何)匹配,而后沒有任何內容。 這在LINQPad中有效-即返回所需結果; 不在我的C#應用​​程序中。

為什么the貶不一,我在做什么錯?

謝謝你的時間。

我能夠使您的示例在LinqPad和Console應用程序中工作。

建議簡化您的正則表達式並避免使用后視和前瞻的用法是使用這樣的單詞邊界:

\\b(?i)GO\\b

這將實現相同的結果,並且更具可讀性。

只是一個小建議:

請使用以下正則表達式:

^GO$

僅當它是一行中的第一個和最后一個字符串時,它才與GO匹配。

暫無
暫無

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

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