Разделение числовой строки на две

Схематический рисунок одного из примеров Пояснение

Долго пытаюсь реализовать алгоритм, но что-то безрезультатно. В str1 у меня может находиться положительные, отрицательное, вещественное, со степенью (e+) число. В str2 меня находится остальная часть строки в которой могут происходить любые математические вычисления. У меня проблема именно со знаком перед str1 (если смотреть пример справа налево). Помогите пожалуйста.
Пример 1:
TextLabel.Text = 2+1,844674407370955e+19
str1 = 1,844674407370955e+19; str2 = 2+;

if (double.TryParse(TextLabel.Text, out double g))//пример кода, когда в строке одно число
                            {
                                double te = (Convert.ToDouble(TextLabel.Text));
                                te = (double)Math.Pow(te, 2);
                                TextLabel.Text = te.ToString();
                                if (TextLabel.Text == "∞")
                                {
                                    TextLabel.Text = "Переполнение";
                                    Сommutator = true;
                                }
                                return;
                            }  
                            else// если в str2 множество математических выражений
                            {
                            
                                TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                                string[] tokens = TextLabel.Text.Split("+-×÷%".ToCharArray(), 3);
    
                                ///// str1
                                string num1 = tokens[0].ToString();
                                num1 = String.Concat(num1.Reverse());
    
                                string num2 = tokens[1].ToString();
                                num2 = String.Concat(num2.Reverse());
                                TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                                var operation1 = TextLabel.Text[tokens[0].Length];
                                var val = num2 + operation1 + num1;
                                var number = double.Parse(val);
                                number = (double)Math.Pow(number, 2);
                                /////
    
                                ///// str2
                                string num3 = tokens[2].ToString();
                                num3 = String.Concat(num3.Reverse());
                                var operation2 = TextLabel.Text[tokens[2].Length];
                                TextLabel.Text = num3 + operation2 + number;
                                ////
                            }

Ответы (1 шт):

Автор решения: wasdalt

Я смог сделать), но через циклы

if (!TextLabel.Text.Any(c => char.IsLetter(c)))
                {
                    int numGH = 0;
                    int plus = 0;
                    for (int i = 0; i <= startIndex; i++)
                    {
                        TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                        if (TextLabel.Text[i] == '+')
                        {
                            plus++;
                        }
                        if ((char.IsDigit(TextLabel.Text[i]) || char.IsLetter(TextLabel.Text[i])) || ",.".Contains(TextLabel.Text[i]))
                        {
                            numGH++;
                            TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                        }
                        else
                        {
                            var str1 = String.Concat(TextLabel.Text.Substring(0, numGH).Reverse()); // str1
                            TextLabel.Text = String.Concat(TextLabel.Text.Remove(0, numGH).Reverse()); // str2
                            var number4 = double.Parse(str1);
                            TextLabel.Text = TextLabel.Text + number4;
                            ///
                            break;

                        }
                    }
                }
                else
                {
                    int numGH = 0;
                    int plus = 0;
                    for (int i = 0; i <= startIndex; i++)
                    {
                        TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                        if (TextLabel.Text[i] == '+')
                        {
                            plus++;
                        }
                        if ((char.IsDigit(TextLabel.Text[i]) || char.IsLetter(TextLabel.Text[i])) || ",.+".Contains(TextLabel.Text[i]) && plus != 2)
                        {
                            numGH++;
                            TextLabel.Text = String.Concat(TextLabel.Text.Reverse());
                        }
                        else
                        {
                            var str1 = String.Concat(TextLabel.Text.Substring(0, numGH).Reverse()); // str1
                            TextLabel.Text = String.Concat(TextLabel.Text.Remove(0, numGH).Reverse()); // str2
                            var number4 = (double)Convert.ToDouble(str1);
                            TextLabel.Text = TextLabel.Text + number4; 
                            ///                          
                            break;

                        }
                    }

                } 
→ Ссылка