我有一个字符串“什么是Facebook?。| A.网站B.互联网C.社交网络D.游戏” 如何将该字符串拆分并存储为在C#编程中分隔的5个字符串?我试着用我的代码分开,但结果我只是一团糟。
我期望的结果是,在拆分之后,我将5个字符串变量分隔为:
string A = "What is Facebook?"
string B = "A. Website"
string C = "B. Internet"
string D = "C. Social Network"
string E = "D. Game"
那是我的代码:
String value = "What is Facebook?.| A. Website B. Internet C. Social Network D. Game";
Char delimiter = '|';
String[] substrings = value.Split(delimiter);
答案 0 :(得分:1)
您可以按\|?\s+(?=[A-Z]\.)
分割:
string[] substrings = Regex.Split(value, @"\|?\s+(?=[A-Z]\.)");
答案 1 :(得分:1)
如果是我,我会创建一个包含问题和可能答案的简单类。这样,您可以将字符串解析为可以执行其他奇特操作的类,例如正确显示自身,并且可以包含指示正确答案索引的属性(因此您可以将用户的选择与正确的索引进行比较)。
例如,此类有一个静态Parse
方法,它接收您的字符串并返回该类的实例。它还会覆盖ToString
,以便以一种很好的方式显示问题和答案:
public class QuestionAndAnswers
{
public string Question { get; set; }
public List<string> Answers { get; set; }
public int IndexOfCorrectAnswer { get; set; }
public static QuestionAndAnswers Parse(string qaInput)
{
if (qaInput == null) throw new ArgumentNullException(nameof(qaInput));
var result = new QuestionAndAnswers();
var parts = Regex.Split(qaInput, @"\|?\s+(?=[A-Z]\.)");
result.Question = parts[0].TrimEnd('.');
result.Answers = parts.Skip(1).ToList();
return result;
}
public override string ToString()
{
return $"{Question}\n {string.Join("\n ", Answers)}";
}
}
然后它可以使用这样的东西:
private static void Main()
{
var input = "What is Facebook?.| A. Website B. Internet C. Social Network D. Game";
var qa = QuestionAndAnswers.Parse(input);
Console.WriteLine(qa);
Console.WriteLine("\nDone!\nPress any key to exit...");
Console.ReadKey();
}
<强>输出强>
答案 2 :(得分:0)
就像@Andrey Nasonov的评论所说,这是一个很好的正则表达式应用程序。
以下内容将为您提供分组,但我觉得必须有更好的方式来表示\ s(\ w。[\ w \ s] +重复四次。
Regex splitter = new Regex(@"(.*)\|\s(\w\.[\w\s]+)\s(\w\.[\w\s]+)\s(\w\.[\w\s]+)\s(\w\.[\w\s]+)");
string[] results = splitter.Split(input);
stringA = results[0];
stringB = results[1];
stringC = results[2];
stringD = results[3];
stringE = results[4];