所以我正在编写一个转换器程序,将旧版本的代码转换为新版本,只需将旧文本放在文本框中,然后将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));
但它有点像每个人的结尾。它以其他方式搞砸了
答案 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[]{'|'});
如果确实出现管道符,请使用另一个(不存在的)字符。