-2

下記の文字列があります。

ISA*ABC**TODAY*ALEXANDER GONZALEZ~HL*CDD*DKKD*S~EB*1*AKDK**DDJKJ~AAA*Y**50*P~AAA*N**50*P~AAA*N**63*C~AAA*N**50*D~AAA*N**45*D

上記の文字列にはセグメントがあります。各セグメントはtilt(〜)記号で始まり、AAAセグメントが表示され、その3番目のインデックスに63という数字が存在するセグメントが存在するかどうかを確認したいと思います。これには正規表現が必要です。これを試してみましたが、正規表現に慣れて(~AAA)いないので、63が3番目のインデックスに表示されるかどうかを確認する方法がわかりません。誰かが助けることができれば私は非常に感謝します。

4

4 に答える 4

2

私はセバスチャンのコメントに同意しなければなりません。これは、簡単な操作で実現できますSplit

    private static bool Check(string input)
    {
        int count = 0;
        foreach (string segment in input.Split('~'))
        {
            string[] tokens = segment.Split('*');
            if (tokens[0] == "AAA")
            {
                count++;
                if (count == 3)
                {
                    if (tokens[3] == "63") return true;
                    else return false;
                }
            }
        }
        return false;
    }

編集:コードの行数を減らしたいので、LINQはどうですか?

    private bool Check(string input)
    {
        return input.Split('~').Select(x => x.Split('*')).Any(x => x.Length >= 4 && x[0].Equals("AAA") && x[3].Equals("63"));
    }

EDIT2:完全を期すために、ここに正規表現ソリューションもあります:

    private bool Check(string input)
    {
        return Regex.IsMatch(input, @".*~AAA\*([^\*~]*\*){2}63.*");
    }
于 2013-01-22T14:50:59.530 に答える
0

正規表現を支援するサイトツールたくさんあります。Googleはさらにお手伝いします。

于 2013-01-22T14:43:05.650 に答える
0
   string s = "ISA*ABC**TODAY*ALEXANDER GONZALEZ~HL*CDD*DKKD*S~EB*1*AKDK**DDJKJ~AAA*Y**50*P~AAA*N**50*P~AAA*N**63*C~AAA*N**50*D~AAA*N*   *45*D";
   string[] parts = s.Split('~');
   for (int i = 0; i < parts.Count(); i++)
   {
      MessageBox.Show("part "+i.ToString()+" contains 63: "+parts[i].Contains("63").ToString());
   }

これは単なる例です。あなたはもっとたくさんのことができます、私はどのセグメントでも63の存在をチェックしました。
したがって、セグメント3かどうかを正確に確認したい場合、コードは次のようになります。

bool segment3Contains63 = s.Slplit('~')[3].Contains("63");
于 2013-01-22T14:43:39.163 に答える
0

あなたはこれを使うことができます:

~AAA\*[A-Z]\*\*63

\は*をエスケープするために使用され、[AZ]は大文字のアルファベット文字と一致することに注意してください。

于 2013-01-22T14:48:20.970 に答える