我想解析这个表达式,并取出相关的值,Source[123] = Target[4563] And Source[454543] = Target[983743] Or Source[..] = Target...[]里目前只支持正整数, 表达式之间可以用And或Or连接,我现在想取出[]里的值并放到二维数组里,用regex应该是最好的方案,但我对这不熟悉,还请各位帮忙,谢谢了
调试欢乐多
List<string> list = new List<string>();
test = Regex.Replace(test, @"\[([^\]]*)\]", new MatchEvaluator(myEvaluator));
foreach (string s in list)
{
TextBox1.Text += s + "\n";
}
private string myEvaluator(Match m)
{
list.Add(m.Groups[1].Value);
return "";
}
有可能表达式是 Source[12343] = "abc", 也可能 Target[34332] = 123,
如果是这种情况,我就得取[]里值并且要知道是Source还是Target,然后取 = 后面的值,它可能是数字,也可能是字符串所以我是希望把它们匹对放入二维数组里,嗯,有点小复杂
Regex reg = new Regex(@"(?<=\[)\d+(?=\])");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*--------输出--------
123
4563
454543
983743
*/
成对取
Regex reg = new Regex(@"(?i)Source\[(\d+)\]\s*=\s*Target\[(\d+)\]");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[1].Value + "\n";
richTextBox2.Text += m.Groups[2].Value + "\n--------------------\n";
}
/*--------输出--------
123
4563
--------------------
454543
983743
--------------------
*/
以下两个例子,看不出有什么规则,分别要取什么?
Source[123] = Target[4563] And Source[454543] = Target[983743] Or Source[..] = Target...
Source[12343] = "abc", 也可能 Target[34332] = 123,
如果表达式这样,
Source[123] = Target[4563] And Source[454543] = Target[983743] And Source[12343] = "abc"(Source[123] = Target[4563] Or Source[454543] = Target[983743]) And Target[34332] = 123
估计这个比较麻烦,我就假设必须按照Source在前出现,Target在后出现的原则吧,那表达式就应该这样,(Source[123] = Target[4563] Or Source[454543] = Target[983743]) And 123 = Target[34332]不清楚的地方请问
(Source[123] = Target[4563] Or Source[454543] = Target[983743]) And 123 = Target[34332]";
Regex reg = new Regex(@"(?i)(\(?Source\[(?<src>\d+)\]|(?<src>\S+))\s*=\s*(Target\[(?<tar>\d+)\]|(?<tar>\S+))");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["src"].Value + "\n";
richTextBox2.Text += m.Groups["tar"].Value + "\n--------------------\n";
}
/*-------输出-------
123
4563
--------------------
454543
983743
--------------------
12343
"abc"
--------------------
123
4563
--------------------
454543
983743
--------------------
123
34332
--------------------
*/
(Source[123] = Target[4563] Or Source[454543] = Target[983743]) And 123 = Target[34332]";
Regex reg = new Regex(@"(?i)(\(?Source\[(?<src>\d+)\]|(?<src>\S+))\s*=\s*(Target\[(?<tar>\d+)\]|(?<tar>\S+))");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["src"].Value + "\n";
richTextBox2.Text += m.Groups["tar"].Value + "\n--------------------\n";
}
/*-------输出-------
123
4563
--------------------
454543
983743
--------------------
12343
"abc"
--------------------
123
4563
--------------------
454543
983743
--------------------
123
34332
--------------------
*/