2016-02-02 2 views
-1

Есть ли способ разделить следующие string (содержащие переменные x1, x2, x3)

3x1+5x2-8x3<=9
Spliting строку в C#

на следующие маркеры

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

+1

Некоторые из операторов, которые рассматриваются токены и другие. Я думаю, вам нужно указать правила для того, что определяет токен. –

+0

Да. Что вы пробовали? – slugster

+0

'string.Split' может легко выполнить задание, если правила более согласованы. – Ian

ответ

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" сепаратор, кроме неравенств. Я также поставил "<=" и ">=" неравенства до "<" и ">". Это сделано, чтобы избежать "<" найти до "<="

+0

Я не думал о замене минус-сигнала чем-то другим, спасибо, сэр, он сделал трюк;) – FrankTominc

+0

@FrankTominc ах да, рад, что это помогает. Первоначально я ошибочно взял ваш знак «x» как знак умножения вместо переменной x1, x2, x3 ... После второго взгляда я просто это осознал.;) Я отредактировал ваш вопрос, чтобы уточнить. – Ian

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 
Смежные вопросы