我正在尝试获取一个整数的数字(不存在小数), 或小数点前小数部分的数字部分。
下面的示例应给出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);
}
答案 0 :(得分:1)
^(?<wholeNumberPart>[0-9]*)
捕获数字的第一部分
\.?
捕获小数点(如果存在)
[0-9]+?$
捕获最后一个数字,而不管是否有小数点
因此,如您所见,最后一位捕获了5位,只剩下1234作为整个numberPart。
我认为这解释了正则表达式组提取为什么给您错误的答案
答案 1 :(得分:1)
\.?
)是可选的,因此可能不匹配。[0-9]+?
)不是可选,而是惰性的,因此它仍然会尝试匹配。因此,可能发生的情况是整数部分消耗了1234,而\.?
不匹配,但小数部分消耗了5。
您应该将小数点分隔符和小数部分组成一个可选的组:
@"^(?<wholeNumberPart>[0-9]*)(\.[0-9]+)?$"