Выбрать только коэффициенты из уравнения - PullRequest
1 голос
/ 10 июля 2019

У меня есть уравнение, записанное следующим образом:

1-я формула: (0.085+4.346*10^-5*((a^2)-(0^2))+0.0017228*(a-(0)))*2 Коэффициенты:
1) 0,085
2) 4,346 * 10 ^ 5
3) 0,0017228

2-я формула: ((0.208+0*d^3-0.00000434*d^2-0.00203*d)*2) Коэффициенты:
1) 0,208
2) 0
3) -0,00000434
4) -0,00203

Из приведенной выше формулы мне нужны регулярные выражения, написанные на C # для извлечения коэффициентов, упомянутых выше.

Я попробовал регулярное выражение: "[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?" возвращает хороший коэффициент s, но не «0», как указано во 2-й формуле сверху.

Я попробовал следующий код:

    string p = @"((0.208+0*d^3-0.00000434*d^2-0.00203*d)*2)";

     var result = Regex.Matches(p, @"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?").Cast<Match>().Select(m => m.Value).Where((x, i) => i % 2 == 0).ToList();
     foreach(string item in result)
     {
        Console.WriteLine(item);
     }

Результат из вышеприведенного кода: 0,208
-0,00000434 -0,00203 (0 отсутствует здесь как 2-й коэффициент, который требуется.)

1 Ответ

0 голосов
/ 10 июля 2019

Желаемый вывод, в частности 4.346*10^5, сделает это выражение слишком сложным, и я также не думаю, что RegEx будет достаточно хорошим, даже если ваше исходное выражение просто отлично.Затем мы немного упростили бы это до:

-?[0-9]*(?:\.?[0-9]+)?(?:[eE][-+]?[0-9]+)? 

и, надеюсь, вы, вероятно, собираетесь выяснить, как вывести 4.346*10^5 или справиться с / обойти это.


Test

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"-?[0-9]*(?:\.?[0-9]+)?(?:[eE][-+]?[0-9]+)?";
        string input = @"0.085+4.346*10^-5*((a^2)-(0^2))+0.0017228*(a-(0)))*2
0.208+0*d^3-0.00000434*d^2-0.00203*d)*2)";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

Выражение объяснено в верхней правой части этой демонстрации , если вы хотите изучить / упростить / изменить ее, и в эта ссылка , если хотите, вы можете посмотреть, как он будет шаг за шагом сопоставляться с некоторыми примерами входных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...