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