在C#中拆分字符串?
我正试图像这样用C#拆分字符串在C#中拆分字符串?,c#,.net,string,visual-studio-2010,visual-studio,C#,.net,String,Visual Studio 2010,Visual Studio,我正试图像这样用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 在上面,它包含三个单词,有时可能包含两个单词或一个单词。 我怎样才能得到高于输出的结果。我在
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();
}
您可以尝试以下操作,首先在空格处拆分,然后使用
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));
}
static void Main(字符串[]args)
{
string str=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
字符串[]标志=str.Split(“”);
列表单词=新列表();
foreach(标志中的字符串f)
{
加(f.Split('-')[0]);
添加(f.Remove(0,f.IndexOf('-')+1));
}
foreach(单词中的字符串)
{
Console.WriteLine(“{0}”,word);
}
Console.ReadLine();
}
带有命名组的正则表达式似乎很适合这里:
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...
}
var模式=
@"^(?[^-]*)-(?[^ ]*) "
+@"(?[^-]*)-(?[^ ]*) "
+@"(?[^-]*)-(?.*)$";
var input=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
var m=Regex.Match(输入,模式);
如果(m.成功)
{
var word1=m.Groups[“word1”].值;
var word2=m.Groups[“word2”].值;
//等等。。。
}
您也可以使用
Split(new char[] { '-' }, 2);
仅在第一次出现-时分割。
因此,首先要进行Split(“”)
,然后进行Split(newchar[]{'-'},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);
string str=“COMMSTR1-NAC-NAM-P-C FCPANAM1-NAC-NAM-P-C CHAZEL1-NAT-CBM-P-C”;
string[]words=str.Split(“”);
列表=新列表();
foreach(单词中的字符串)
{
AddRange(word.Split(新字符[]{'-},2));
}
foreach(列表中的变量s)控制台。WriteLine(s);
尝试将字符串分隔符从“”更改为“|”,然后使用str.Split(“|”)代码>它们是以制表符分隔还是以空格分隔?是否总是在空格(“”)上拆分,然后在第一个连字符(“”)上拆分?标准是什么?您使用的是拆分(“”)
但是这对这个有什么帮助呢COMMSTR1-NAC-NAM-P-C
?是数字吗?@DanielA.White space delimited..我会将调用缓存到IndexOf
@Habib.OSU如何打印我从未使用过的单词列表。@Habib.OSU我想将所有6个不同的单词存储在不同的变量中。@Viswanathan makeforeach(stringList中的var s){Console.WriteLine({0}),s);}
@Habib.OSU但如何将其存储在不同的变量中。
Split(new char[] { '-' }, 2);
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);