System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<expression>\w+)\W*)+"); System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x"); for (int I = 0; I < match.Groups.Count; I++) { for(int J=0;J<match.Groups[I].Captures.Count;J++) { Console.WriteLine(match.Groups[I].Captures[J].Value); } }
修正下: System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<expression>[a-z]+)\W*)+", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x"); foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures) Console.WriteLine(capture.Value);输出: A A B c d e
不好意思,没考虑纯数字及数字开头的情况,应该是: [a-zA-Z_]+(\w|_)+
Reger r=new Reger("\s+?"); Match m=r.Match(@"A+(A+B)*c-(d+e*6)/x"); while(m.Success) { RichtextBox1.AppendText(m.Value+"\r\n"); m=m.NextMatch(); }
Sorry,写得太快,没考虑那么多.下面的正则表达式会完善些: System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x"); foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures) Console.WriteLine(capture.Value);输出: A Ad B c d_7 e x
再修改: System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x"); foreach (System.Text.RegularExpressions.Capture capture in match.Groups["var"].Captures) Console.WriteLine(capture.Value);
System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x");
for (int I = 0; I < match.Groups.Count; I++)
{
for(int J=0;J<match.Groups[I].Captures.Count;J++)
{
Console.WriteLine(match.Groups[I].Captures[J].Value);
}
}
System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<expression>[a-z]+)\W*)+", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x");
foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures)
Console.WriteLine(capture.Value);输出:
A
A
B
c
d
e
[a-zA-Z_]+(\w|_)+
Match m=r.Match(@"A+(A+B)*c-(d+e*6)/x");
while(m.Success)
{
RichtextBox1.AppendText(m.Value+"\r\n");
m=m.NextMatch();
}
System.Text.RegularExpressions.Regex reT =
new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x");
foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures)
Console.WriteLine(capture.Value);输出:
A
Ad
B
c
d_7
e
x
System.Text.RegularExpressions.Regex reT =
new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x");
foreach (System.Text.RegularExpressions.Capture capture in match.Groups["var"].Captures)
Console.WriteLine(capture.Value);