問題!
我從一個平面文件下面輸入(規則)(談論數字輸入):C#正則表達式問題
- 輸入可能是一個自然數(低於1000):
1, 10, 100, 999, ...
- 輸入可能是一個逗號分隔在雙引號(1000以上)數目:
"1,000", "2,000", "3,000", "10,000", ...
我有以下正則表達式來驗證輸入:(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22)
,所以對於像10
我期待在第一毫安的輸入tching group 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解析文件,有沒有其他方法可以解決此問題。 Actualy我試圖實現一個自定義轉換器。
對象文件
[FieldConverter(typeof(OOR_Quantity))]
public Int32 Quantity;
OOR_Quantity
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 ...
}
}
我不知道我是否真的忘了這件事,或者我完全誤解了規則。謝謝! – Eder 2012-01-18 01:42:57