分裂为多个字符
本文关键字:字符 分裂 | 更新日期: 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[]{'|'});
如果出现了管道字符,则使用另一个(不出现的)字符