将字符串拆分为多个字符串分隔

时间:2017-11-14 18:38:02

标签: c# string

我有一个字符串“什么是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);

3 个答案:

答案 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();
}

<强>输出

enter image description here

答案 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];