簡體   English   中英

.NET中的懶惰正則表達式匹配。 這有什么不對?

[英]Lazy Regex Match in .NET. What's wrong here?

pMAINp and the pMDSp. 在以下示例中,我想檢索pMAINp和第 pMDSp 的文本。 正則表達式具有后視和前瞻:

string contents = "pMAINp MAP B FlightTest Load pMDSp ZutiCarrier pWingp some pMDSp more pWingp end";
string blockMainRegex = @"(?<=pMAINp)[\s\w+]+(?=(pMDS)?)";

我希望的結果是:“MAP B FlightTest Load”

但它返回的是:“MAP B FlightTest加載pMDSp ZutiCarrier pWingp一些pMDSp更多pWingp結束”

你會注意到我在這里嘗試一個懶惰的比賽:(pMDS)? 這顯然不起作用! 任何有關這方面的幫助將非常感激。 謝謝。 :-)

編輯 :哎呀,尋求的文本已得到糾正。

這非常有效:
string blockMainRegex = @“(?<= pMAINp)[\\ s \\ w +] +?(?= pMDS)”;

你會注意到我在這里嘗試一個懶惰的比賽:(pMDS)? 這顯然不起作用!

你似乎誤解了懶惰匹配是如何工作的。

您將惰性運算符應用於量詞 - *,+ ,? 等等 - 在任何其他地方,它被解釋為“零或一”。

如果您希望正則表達式的一部分匹配盡可能少的字符,請將延遲運算符應用於與正則表達式的該部分關聯的量詞 - 在這種情況下,您希望像這樣使用它:

[\s\w+]+?
string blockMainRegex = @"pMAINp(.*?)pMDSp";

第一組將擁有你想要的東西。 例如:

Regex re = new Regex(@"pMAINp(.*?)pMDSp");
string result = re.Match(contents).Groups[1].ToString();

暫無
暫無

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

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