問題!
私はフラットファイル(数値入力の話)から以下の入力(ルールを)持っている:C#正規表現のトラブル
- 入力は(1000年未満)の自然数であるかもしれない:
1, 10, 100, 999, ...
- 入力はカンマ区切りであるかもしれません(1000年、上記)引用符で囲まれた数:私は最初のミリアンペアに期待してい
10
などの入力のために(?:(\d+)|\x22([0-9]+(?:,[0-9]+)*)\x22)
:だから、私は入力を検証するために、次の正規表現をお持ちの"1,000", "2,000", "3,000", "10,000", ...
私はちょうど私が得たものです10
、グループを傾聴する。しかし、"10,000"
のような入力があったとき、私は最初の一致グループ10,000
を期待していますが、2番目の一致するグループに格納されています。
例
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_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