问题!
我有来自平面文件的以下输入(规则)(谈论数字输入):
- 输入可能是一个自然数(低于 1000):
1, 10, 100, 999, ...
- 输入可能是用引号括起来的逗号分隔数字(大于 1000):
"1,000", "2,000", "3,000", "10,000", ...
我有以下正则表达式来验证输入:(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22)
,所以对于10
我在第一个匹配组中所期望的输入10
,这正是我得到的。但是当我"10,000"
在第一个匹配组中得到我期望的输入时10,000
,它存储在第二个匹配组中。
例子
string text1 = "\"" + "10,000" + "\"";
string text2 = "50";
string pattern = @"(\d+)|\x22([0-9]+(?:,[0-9]+){0,})\x22";
Match match1 = Regex.Match(text1, pattern);
Match match2 = Regex.Match(text2, pattern);
if (match1.Success)
{
Console.WriteLine("Match#1 Group#1: " + match1.Groups[1].Value);
Console.WriteLine("Match#1 Group#2: " + match1.Groups[2].Value);
# Outputs
# Match#1 Group#1:
# Match#1 Group#2: 10,000
}
if (match2.Success)
{
Console.WriteLine("Match#2 Group#1: " + match2.Groups[1].Value);
Console.WriteLine("Match#2 Group#2: " + match2.Groups[2].Value);
# Outputs
# Match#2 Group#1: 50
# Match#2 Group#2:
}
预期结果
在同一匹配组上的两个结果,在这种情况下1
问题?
- 我究竟做错了什么?我只是从正则表达式匹配中得到糟糕的分组。
- 另外,我正在使用filehelpers .NET来解析文件,有没有其他方法可以解决这个问题。实际上我正在尝试实现自定义转换器。
目标文件
[FieldConverter(typeof(OOR_Quantity))]
public Int32 Quantity;
OOR_数量
internal class OOR_Quantity : ConverterBase
{
public override object StringToField(string from)
{
string pattern = @"(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22)";
Regex regex = new Regex(pattern);
if (regex.IsMatch(from))
{
Match match = regex.Match(from);
return int.Parse(match.Groups[1].Value);
}
throw new ...
}
}