拆分多个字符

时间:2014-08-20 16:17:15

标签: c#

所以我正在编写一个转换器程序,将旧版本的代码转换为新版本,只需将旧文本放在文本框中,然后将Txt转换为Xml,我试图获取两个字符之间的每个项目,下面是我试图分裂的字符串。我在“”中只放了param的名称来保护我的用户凭据。所以我想在“,”

之间获取代码的每一部分
["Id","Username","Cash","Password"],["Id","Username","Cash","Password"]

然后将每个字符串添加到列表中,这样就像

Item 1
["Id","Username","Cash","Password"]

Item 2
["Id","Username","Cash","Password"]

我会用“,”拆分它然后它会搞砸,因为在字符串的参数之间有一个“,”所以我尝试使用“],”

string input = textBox1.Text;
string[] parts1 = input.Split(new string[] { "]," }, StringSplitOptions.None);
foreach (string str in parts1)
{
    //Params is a list...
    Params.Add(str);
}
MessageBox.Show(string.Join("\n\n", Params));

但它有点像每个人的结尾。它以其他方式搞砸了

3 个答案:

答案 0 :(得分:1)

对于正则表达式来说,这似乎是一个很好的机会。

我的方法是首先获取行部分,然后获取列部分。我确信有大约30种方法可以做到这一点,但这是我的(简单化)方法。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var rowPattern = new Regex(@"(?<row>\[[^]]+\])", RegexOptions.Multiline | RegexOptions.ExplicitCapture);
            var columnPattern = new Regex(@"(?<column>\"".+?\"")", RegexOptions.Multiline | RegexOptions.ExplicitCapture);
            var data = "[\"Id\",\"Username\",\"Cash\",\"Password\"],[\"Id\",\"Username\",\"Cash\",\"Password\"]";
            var rows = rowPattern.Matches(data);
            var rowCounter = 0;
            foreach (var row in rows)
            {
                Console.WriteLine("Row #{0}", ++rowCounter);
                var columns = columnPattern.Matches(row.ToString());
                foreach (var column in columns)
                    Console.WriteLine("\t{0}", column);
            }
            Console.ReadLine();
        }
    }
}

希望这会有所帮助!!

答案 1 :(得分:1)

您可以将Regex.Split()positive lookbehind and lookahead一起使用来执行此操作:

var parts = Regex.Split(input, "(?<=]),(?=\\[)");

基本上,这表示“在,之前与]分开,紧随其后[”。

答案 2 :(得分:0)

假设角色&#39; |&#39;在您的原始数据中不会出现,您可以尝试:

input.Replace("],[", "]|[").Split(new char[]{'|'});

如果确实出现管道符,请使用另一个(不存在的)字符。