Получить второе вхождение из второго ряда

Если вы действительно хотите знать разницу, бросайте каждый указатель на (char *), а затем на (int), а затем вычитаете. Это должно дать вам ответ.

Этот код дает вам абсолютное значение:

printf("%d\n", abs((int)((char*)q) - (int)((char*)p)));

Не забудьте включить math.h.

Изменить: Как указано в комментарии, Мне нужен двойной бросок. Кастинг каждого указателя указателя на int, а затем вычитание дает тот же ответ, что и (ненужное) двойное литье выше.

printf("%d\n", abs((int)(q) - (int)(p)));
0
задан Vlădel 19 March 2019 в 15:15
поделиться

3 ответа

В конце концов, я получил ответ методом проб и ошибок.

\| Average \| .*\d+\% +\| *(\d*.\d\%) +\| +\d

будет математике столбец ниже ветви. Спасибо всем за помощь!

0
ответ дан Vlădel 19 March 2019 в 15:15
поделиться

Одно решение, которое я вижу, состоит в том, чтобы иметь регулярное выражение, которое будет захватывать несколько строк, начиная с первого «Среднее» и заканчивая вторым. Что касается всей логики, содержащейся в регулярном выражении, то вам необходимо знать, как задать параметры поиска в вашем регулярном выражении, обычно это делается с помощью /sm. В конце ваше регулярное выражение будет выглядеть так:

/^\| Average *\| \d*.\d+\%.*$.*^\| Average *\| (\d*.\d+\%).*$/sm

Захваченная группа содержит только второе вхождение Average процента Line.

0
ответ дан cglacet 19 March 2019 в 15:15
поделиться

Как насчет этого:

string table =
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "|         | Line      | Branch    | Method    |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "| Total   | 100%      | 100%      | 100%      |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "| Average | 100%      |  89%      | 100%      |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "|         | Line      | Branch    | Method    |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "| Total   | 100%      | 100%      | 100%      |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+" + Environment.NewLine +
    "| Average | 100%      | 99%       | 100%      |" + Environment.NewLine +
    "+---------+-----------+-----------+-----------+";

MatchCollection matches = Regex.Matches(table, @"(?<=\| Average *\| \d+\% +\| *)\d+\%(?=.*)");

foreach (Match m in matches)
{
    Console.WriteLine(m.Value);
}

Выходы:

89%
99%
<час>

Обновление:

Мне нужно было узнать, что .NET (где я построил мой RegEx) поддерживает квантификаторы в обходных выражениях, в то время как в других реализациях RegEx такой поддержки нет.

Поэтому выражение RegEx моего решения не будет работать там.

Чтобы решить эту проблему, я удалил квантификаторы и заменил их объявлениями с фиксированными символами. Это работает для фиксированной таблицы, но не будет работать, если макет таблицы имеет динамическую ширину:

(?<=\| Average \| ..\d\%      \| )\d+\%(?=.*)
0
ответ дан Nicolas 19 March 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: