[英]Why is Regex Group Extraction Giving Wrong Answer?
我正在嘗試獲取整數的數字(不存在小數),或小數點小數點之前的數字部分。
下面的例子應該給出 12345 作為答案。 但它給它 1234(吃掉 5)
string isDecimalTypeNumbers = @"^(?<wholeNumberPart>[0-9]*)\.?[0-9]+?$";
Regex pattern = new Regex(isDecimalTypeNumbers);
Match match = pattern.Match("12345");
if (match.Success)
{
string wholeNumberPartWithoutPlusMinusSign = match.Groups["wholeNumberPart"].Value;
MessageBox.Show(wholeNumberPartWithoutPlusMinusSign);
}
^(?<wholeNumberPart>[0-9]*)
捕獲數字的第一部分
\.?
捕獲小數點(如果存在)
[0-9]+?$
無論是否有小數點,都捕獲最后一個數字
因此,如您所見,最后一位捕獲了 5,僅留下 1234 作為整個數字部分。
我想這解釋了為什么正則表達式組提取給你1234的錯誤答案
\\.?
) 是可選的,因此它可能不匹配。[0-9]+?
)不是可選的,而是 lazy ,因此它仍然會嘗試匹配。 那么,可能發生的情況是 1234 被整數部分消耗,而\\.?
不匹配,但小數部分消耗了 5。
您應該將小數分隔符和小數部分組成一個可選組:
@"^(?<wholeNumberPart>[0-9]*)(\.[0-9]+)?$"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.