Есть ли способ разделить следующие string
(содержащие переменные x1, x2, x3
)
3x1+5x2-8x3<=9
Spliting строку в C#
на следующие маркеры
{3, 1, +5, 2, -8, 3, 9}
Есть ли способ разделить следующие string
(содержащие переменные x1, x2, x3
)
3x1+5x2-8x3<=9
Spliting строку в C#
на следующие маркеры
{3, 1, +5, 2, -8, 3, 9}
Поскольку дело не так сложно, я, вероятно, решил бы эту проблему, используя 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"
сепаратор, кроме неравенств. Я также поставил "<="
и ">="
неравенства до "<"
и ">"
. Это сделано, чтобы избежать "<"
найти до "<="
Я не думал о замене минус-сигнала чем-то другим, спасибо, сэр, он сделал трюк;) – FrankTominc
@FrankTominc ах да, рад, что это помогает. Первоначально я ошибочно взял ваш знак «x» как знак умножения вместо переменной x1, x2, x3 ... После второго взгляда я просто это осознал.;) Я отредактировал ваш вопрос, чтобы уточнить. – Ian
Вы можете использовать регулярное выражение для этого и извлекать только номера с признаками:
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
Некоторые из операторов, которые рассматриваются токены и другие. Я думаю, вам нужно указать правила для того, что определяет токен. –
Да. Что вы пробовали? – slugster
'string.Split' может легко выполнить задание, если правила более согласованы. – Ian