【问题标题】:How do I split a string on both commas and newlines in c#?如何在 C# 中拆分逗号和换行符上的字符串?
【发布时间】:2016-03-24 12:23:58
【问题描述】:

我正在尝试根据来自 textarea 的输入拆分一个可以以逗号或换行符出现的字符串。我不确定在 c# 中拆分此字符串的语法。 目前我有:

string[] splitString = inputString.Split(','); //WORKS
//string[] splitString = inputString.Split(new string[] { ",","\r\n","\n" }, StringSplitOptions.None); //DOES NOT WORK

【问题讨论】:

标签: c# regex split


【解决方案1】:

由于某些文本使用\r 换行。

您应该使用下面的代码并删除空条目以使数组更干净。

string[] splitString = inputString.Split(new string[] { ",", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);

或使用Regex.Split。 (这不会删除空条目。)

String[] splitString = Regex.Split(inputString, "[,\r\n]");

更新

感谢WiktorStribiżew 的评论,您还可以使用Regex.Split 删除空条目。

下面的代码删除了不在字符串开头或结尾的空条目。

String[] splitString = Regex.Split(inputString, "[,\r\n]+");

要消除显示在行首或行尾的空条目,请使用以下代码。

Regex.Split(Regex.Replace(inputString, "^[,\r\n]+|[,\r\n]+$", ""), "[,\r\n]+");

正则表达式语言

如果您想了解有关Regex 或其工作原理的更多信息,可以查看here 以获得快速参考。

【讨论】:

  • 您可以修改Regex.Split 以不将CRLF 拆分为带有String[] splitString = Regex.Split(inputString, "(\r\n|\r|\n|,)"); 的空行
  • 你是转义了反斜杠,还是使用了@"(\r\n|\r|\n|,)"。我只是在那里复制了我的正则表达式,并没有考虑到这一点。制作这个example 来说明它。 rn\r\n 的占位符,只是为了清楚起见。
  • 似乎Regex.Split 将捕获组插入到字符串序列(或类似的东西:S)中。我不知道。所以把它改成@"(?:\r\n|\r|\n|,)"就可以了:)
  • @ClasG 不,它仍然因多个 , 或换行符而失败。我尝试使用Regex.Split 并自己删除空条目,但徒劳无功...
  • 如果在字符串的开头/结尾找到拆分模式,则将有一个空元素。要消除它,您需要两步 S&R:Regex.Split(Regex.Replace(s, "^[,\r\n]+|[,\r\n]+$", ""), "[,\r\n]+")。无论如何,我认为这里不需要正则表达式。
【解决方案2】:

您可以将 Environment.NewLine 传递到您的字符串数组中:

string[] splitString = inputString.Split(new string[] { ",", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 2013-02-03
    • 2016-10-19
    • 2017-08-24
    • 2012-05-24
    相关资源
    最近更新 更多