C# 用多个字符拆分

C# 用多个字符拆分,c#,C#,所以我正在编写一个转换程序,将旧版本的代码转换成新版本。你只需将旧文本放入文本框中,它将Txt转换成Xml,我尝试将每个项目转换为两个字符,下面是我尝试拆分的字符串。我只在“”中输入了参数的名称,以保护我的用户凭据。所以我想让代码的每一部分都在“,” 然后将每个字符串添加到列表中 Item 1 ["Id","Username","Cash","Password"] Item 2 ["Id","Username","Cash","Password"] 我会使用“,”来拆分它,但它会搞砸,因为字

所以我正在编写一个转换程序,将旧版本的代码转换成新版本。你只需将旧文本放入文本框中,它将Txt转换成Xml,我尝试将每个项目转换为两个字符,下面是我尝试拆分的字符串。我只在“”中输入了参数的名称,以保护我的用户凭据。所以我想让代码的每一部分都在“,”

然后将每个字符串添加到列表中

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

Item 2
["Id","Username","Cash","Password"]
我会使用“,”来拆分它,但它会搞砸,因为字符串的参数之间有一个“,”,所以我尝试使用“]”


但它有点像每一个的结尾。如果字符“|”不出现在原始数据中,则可以尝试以下操作:

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

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

这似乎是正则表达式的一个很好的机会

我的方法是先获取行部分,然后获取列部分。我确信有大约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();
        }
    }
}
使用系统;
使用System.Text.RegularExpressions;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
var rowPattern=newregex(@“(?\[[^]]+\]),RegexOptions.Multiline | RegexOptions.ExplicitCapture);
var columnPattern=newregex(@“(?\”.+?\”)”,RegexOptions.Multiline | RegexOptions.ExplicitCapture);
var data=“[\“Id\”,“Username\”,“Cash\”,“Password\”],[\“Id\”,“Username\”,“Cash\”,“Password\”];
var rows=rowPattern.Matches(数据);
var rowCounter=0;
foreach(行中的变量行)
{
WriteLine(“行#{0},++行计数器);
var columns=columnPattern.Matches(row.ToString());
foreach(列中的var列)
WriteLine(“\t{0}”,列);
}
Console.ReadLine();
}
}
}
希望这有帮助

您可以与一起使用来执行此操作:

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

var parts=Regex.Split(输入,“(?您是否尝试过拆分然后内联替换?看起来像是Regex的作业,您需要在非贪婪模式下匹配“[.]”,或者您可以执行此操作
string[]parts1=string.Split(新字符[]{',','[',']},StringSplitOptions.removemptyEntries)
clear text passwords.。这不会很好地结束。这看起来几乎像JSON数据。这样对待它可能要容易得多。我认为这只会分割第一个密码对吗?有没有一种方法可以不止一次地这样做,因为将有100多个these@AshSmith否,
Replace()
替换所有出现的内容,而不仅仅是第一个。不,将替换所有出现的“]”、[”:
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();
        }
    }
}
var parts = Regex.Split(input, "(?<=]),(?=\\[)");