0

このようにC#で文字列を分割しようとしています

COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C

する必要があります

word1     word2       word3      word4     word5   word5
COMMSTR1 NAC-NAM-P-C FCPANAM1 NAC-NAM-P-C  CHAZEL1 NAT-CBM-P-C

上記では、3 つの単語が含まれている場合があり、2 つの単語または 1 つの単語が含まれている場合もあります。上記の出力を取得するにはどうすればよいですか。以下を試していましたが、行き詰まりました。

class Program
        {
            static void Main(string[] args)
            {
                string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";

                string[] words = str.Split(' ');

                 foreach(string word in words)
                    {
                        Console.WriteLine("{0}",word);
                    }

                    Console.ReadLine();

            }
4

4 に答える 4

6

次のことを試してみてください。最初にスペースで分割してIndexOfから、単語から休憩するために使用します。:

 string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
 string[] words = str.Split(' ');
 List<string> list = new List<string>();
 foreach (string word in words)
   {
            int index = word.IndexOf('-'); // as per Daniel's suggestion
            list.Add(word.Substring(0,index));
            list.Add(word.Substring(index+1));
    }

//印刷用

    foreach (string tempStr in list)
    {
        Console.WriteLine(tempStr);
    }
于 2012-06-22T10:22:17.433 に答える
2
    static void Main(string[] args)
    {
        string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";

        string[] flag = str.Split(' ');
        List<string> words = new List<string>();
        foreach (string f in flag)
        {
            words.Add(f.Split('-')[0]);
            words.Add(f.Remove(0, f.IndexOf('-') + 1));
        }

        foreach (string word in words)
        {
            Console.WriteLine("{0}", word);
        }

        Console.ReadLine(); 
    }
于 2012-06-22T10:27:57.737 に答える
1

ここでは、名前付きグループを使用した正規表現が適しているようです。

var pattern=
    @"^(?<word1>[^-]*)-(?<word2>[^ ]*) "
    +@"(?<word3>[^-]*)-(?<word4>[^ ]*) "
    +@"(?<word5>[^-]*)-(?<word6>.*)$";
var input="COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
var m=Regex.Match(input,pattern);
if(m.Success)
{
    var word1=m.Groups["word1"].Value;
    var word2=m.Groups["word2"].Value;
    //etc...
}
于 2012-06-22T10:31:18.220 に答える
0

使用することもできます

Split(new char[] { '-' }, 2);

- の最初の出現でのみ分割します。だから最初にあなたSplit(' ')、次にSplit(new char[] { '-' }, 2);

@ Habib.OSUの回答の修正版は、次のようになります。

string str = "COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C";
string[] words = str.Split(' ');
List<string> list = new List<string>();
foreach (string word in words)
{
        list.AddRange(word.Split(new char[] { '-' }, 2));
}
foreach(var s in list) Console.WriteLine(s);
于 2012-06-22T10:32:03.433 に答える