在C#中分割字符串

时间:2016-02-02 05:19:49

标签: c# regex c#-4.0

有没有办法拆分以下string(包含变量x1, x2, x3

3x1+5x2-8x3<=9

进入以下令牌

{3, 1, +5, 2, -8, 3, 9}

2 个答案:

答案 0 :(得分:5)

您可以使用正则表达式并仅提取带有符号的数字:

const string str = "3x1+5x2-8x3<=9";
var result = Regex.Matches(str, @"([\+\-]?[\d]+)", RegexOptions.Singleline)
    .Cast<Match>().Select(x => x.Value).ToList();

结果:

[0] "3" string
[1] "1" string
[2] "+5"    string
[3] "2" string
[4] "-8"    string
[5] "3" string
[6] "9" string

答案 1 :(得分:3)

由于案例并不复杂,我可能会使用string.Split代替Regex解决此类问题:

string str = "3x1+5x2-8x3<=9";
str = str.Replace("+", "x+").Replace("-", "x-");
string[] words = str.Split(new string[] {"x", "<=", ">=", "<", ">"}, StringSplitOptions.RemoveEmptyEntries);

这个想法是让"x"除了不等式之外的分隔符。我还在"<="">="之前设置了"<"">"不等式。这样做是为了避免在"<"

之前找到"<="