我正试图在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
在上面它包含三个单词,有时它可能包含两个单词或一个单词。 我怎样才能获得以上输出。我在下面尝试但是卡住了。
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();
}
答案 0 :(得分: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);
}
答案 1 :(得分: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();
}
答案 2 :(得分: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...
}
答案 3 :(得分: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);