簡體   English   中英

為什么正則表達式組提取給出錯誤答案?

[英]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.

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