-1

このフライト データのリストがあり、正規表現を使用して解析できるようにする必要があります (これはリスト全体ではありません)。

1 AA2401 F7 A4 Y7 B7 M7 H7 K7 /DFW A LAX 4 0715 0836 E0.M80 9 3:21
 2 AA2421 F7 A1 Y7 B7 M7 H7 K7 DFWLAX 4 1106 1215 E0.777 7 3:09
 3UA:US6352 B9 M9 H9 K0 /DFW 1 LAX 1200 1448 E0.733 1:48

たとえば、最初の行から 1、AA、2401 などが必要になる場合があります。今、誰かに正規表現を考えてもらうように頼んでいるわけではありません。私の問題は、データをどこかに保存してアクセスできることと関係があります。

したがって、最初に、必要な最初のデータ、つまり行番号「1」を「一致」させようとしています。最初の数値を取得するための私の「パターン」は、 ".?(\d{1,2}).*" です。それが {1,2} である理由は、明らかに 10 を超えると、2 つの数を取ることができる必要があるためです。行の残りの部分は、必ずスペースまたは文字になるように設定されています。

コードは次のとおりです。

var assembly = Assembly.GetExecutingAssembly();
var textStreamReader = new StreamReader(
    assembly.GetManifestResourceStream("FlightParser.flightdata.txt"));
List<string> lines = new List<string>();
do
{
    lines.Add(textStreamReader.ReadLine());
} while (!textStreamReader.EndOfStream);


Regex sPattern = new Regex(@".?(\d{1,2}).*");//whatever the pattern is

foreach (string line in lines)
{
    System.Console.Write("{0,24}", line);

    MatchCollection mc = sPattern.Matches(line);
    if ( sPattern.IsMatch(line))
    {
        System.Console.WriteLine("  (match for '{0}' found)", sPattern);
    }
    else
    {
        System.Console.WriteLine();
    }
    System.Console.WriteLine(mc[0].Groups[0].Captures);

    System.Console.WriteLine(line);
}//end foreach
System.Console.ReadLine();

私が書いているコードでは、基本的に '1' を match コレクションに入れ、何らかの方法でそれにアクセスしてコンソールに書き込もうとしています (テストのため、これは最終的な目標ではありません)。

4

3 に答える 3

0

ファイルが投稿したとおりに実際にフォーマットされておらず、各フィールドが何かで区切られていると仮定すると、行の最初の 2 桁の数字をこの正規表現と一致させることができます (0 と先行ゼロは無視されます)。

^\s*([1-9]\d?)

グループ化されているので、オブジェクトのGroupsプロパティから該当箇所にアクセスできます。Match

var line = "12 foobar blah 123 etc";
var re = new Regex(@"^\s*([1-9]\d?)");
var match = re.Match(line);
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value); // "12"
}
else
{
    Console.WriteLine("No match");
}
于 2012-06-26T00:40:28.650 に答える
0

正規表現パターンには、任意の数の文字に一致するアスタリスクが含まれています-つまり. ライン全体。「*」を削除すると、「1」のみに一致します。このようなオンライン正規表現テスターが役立つ場合があります。

于 2012-06-26T00:40:12.093 に答える
0

次の式は、グループ "First" 内の、キャプチャしたい最初の数字と一致します。

^\s*(?<First>\d{1})

この正規表現ツールは、正規表現を扱うときに非常に便利です。試してみる。また、一致させるときは、RegexOption を Multiline に設定します。

于 2012-06-26T02:55:20.930 に答える