分裂为多个字符

本文关键字:字符 分裂 | 更新日期: 2023-09-27 18:19:01

所以我正在编写一个转换程序,将旧版本的代码转换为新版本,您只需将旧文本放在文本框中,它将Txt转换为Xml,我试图在两个字符之间获取每个项目,下面是我试图分割的字符串。我只把参数的名称放在"中,以保护我的用户凭据。所以我想要得到","

之间的每一部分代码
["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));

但它有点像每一个的结尾。它还会以其他方式出错

分裂为多个字符

这看起来是正则表达式的一个很好的机会。

我的方法是先获取行部分,然后获取列部分。我确信有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();
        }
    }
}

希望这有帮助!!

您可以将Regex.Split()与正向向后看和正向向前看一起使用:

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

基本上这是在说"在,上分裂,]在它前面,[在它后面"

假设字符'|'没有出现在原始数据中,您可以尝试:

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

如果出现了管道字符,则使用另一个(不出现的)字符