需要在第一个\ r \ n之后创建一个正则表达式来拆分字符串

时间:2016-10-20 06:57:04

标签: c# asp.net regex

我一直陷入困境。

这里有几个输入字符串 -

 "abacuses\r\n25"

"alphabet\r\n56,\r\n57"

"animals\r\n44,\r\n45,\r\n47"

我需要将输出分割为 -

"abacuses\r\n25" to be splitted into A)abacuses B)25


"alphabet\r\n56,\r\n57" to be splitted into A)alphabet B)56,57


"animals\r\n44,\r\n45,\r\n47" to be splitted into A)animals B)44,45,47

到目前为止,我已经尝试了这个但它不起作用 -

string[] ina = Regex.Split(indexname, @"\r\n\D+");

string[] ina = Regex.Split(indexname, @"\r\n\");

请帮助

2 个答案:

答案 0 :(得分:1)

您的示例中不需要正则表达式。你基本解析字符串:

string input = "animals\r\n44,\r\n45,\r\n47";
var split = input.Split(new char[]{'\r','\n',','}, StringSplitOptions.RemoveEmptyEntries);

var name = split[0];                        //animals
var args = string.Join(",", split.Skip(1)); //44,45,37

许多人使用它进行解析,但Regex不是解析语言!它是模式匹配器!它用于在字符串中查找子字符串!如果你可以拆分你的字符串 - 就这样做,真的。它比Regex表达更容易理解。

答案 1 :(得分:1)

如果您需要在第一个\r\n分割字符串,则可以使用带有 count 参数的String.Split

var line = "animals\r\n44,\r\n45,\r\n47";
var res = line
    .Split(new[] {"\r\n"}, 2, StringSplitOptions.RemoveEmptyEntries);
// Demo output
Console.WriteLine(res[0]);
if (res.GetLength(0) > 1) 
    Console.WriteLine(res[1].Replace("\r\n", "")); // In the second value, linebreaks should be removed

请参阅C# demo

2中的.Split(new[] {"\r\n"}, 2, StringSplitOptions.RemoveEmptyEntries)表示整个字符串应仅拆分为2个部分,并且由于字符串是从左到右处理的,因此拆分将在首先进行“\ r \ n”找到子串。