Чтение переменной с более чем двумя цифрами из строки между символами c #

Вы можете легко сделать это в других базах данных с помощью рекурсивного запроса (YMMV на производительность).

Другой способ сделать это - сохранить два дополнительных бита данных, левый и правый стоимость. Левое и правое значение получены из предварительного предпросмотра древовидной структуры, которую вы представляете.

Это известно как измененный обход дерева предзаказов и позволяет запускать простой запрос, чтобы получить все родительские значения в один раз. Он также имеет название «вложенный набор».

0
задан M.Cal 13 July 2018 в 19:59
поделиться

3 ответа

Вот решение с использованием регулярных выражений:

List<double> numbers = new Regex(@"(\d+)\*x").Matches(line)
                         .Cast<Match>()
                         .Select(m => double.Parse(m.Groups[1].Value))
                         .ToList();

EDIT: обновлено для анализа чисел.

1
ответ дан itsme86 17 August 2018 в 12:11
поделиться
  • 1
    Если вы используете последнюю версию System.Text.RegularExpressions, вам не нужен Cast<Match>, поскольку MatchCollection уже наследует ICollection<Match>, IEnumerable<Match>, IEnumerable, IList<Match>, IReadOnlyCollection<Match>, IReadOnlyList<Match>, ICollection, IList – Kevin Smith 13 July 2018 в 19:55
  • 2
    @KevinSmith Вы используете Core или что-то в этом роде? Regex - это часть сборки System.dll для меня. – itsme86 13 July 2018 в 19:58
  • 3
    Спасибо, это работает. Могу ли я спросить, как отредактировать код, чтобы получить значение позади & quot; = & quot; также ? – M.Cal 13 July 2018 в 20:02
  • 4
    @ itsme86 нет, он называется nuget, это менеджер пакетов для .net :-) Этот пакет работает со всеми версиями .net framework, отбрасывая обратно в .NET 4.5 - nuget.org/packages/System.Text.RegularExpressions/4.3 +0,0 – Kevin Smith 13 July 2018 в 20:06
  • 5
    @ M.Cal Нет проблем. Я получил бы номер после & quot; = & quot; в другом заявлении: double answer = double.Parse(new Regex(@"=\W*(\d+)").Match(line).Groups[1].Value); – itsme86 13 July 2018 в 20:12

Вы можете попробовать это.

  string line = "14*x1 + 2*x2 + 3*x3 = 2";
  var arr = line.Split('+');
  var result = arr.Select(x => x.Substring(0, x.IndexOf('*')));
1
ответ дан D-Shih 17 August 2018 в 12:11
поделиться
  • 1
    Это просто пример, что, если у них есть разные операторы, такие как «-» или «/», вместо «+»? Хороший ответ – Isaac Abramowitz 13 July 2018 в 19:37

Простой RegEx (\d+)\* должен сделать трюк.

var line = "14*x1 + 2*x2 + 3*x3 = 2";

var matches = Regex.Matches(line, @"(\d+)\*");

// [] { 14, 2 , 3 }
var numbers = matches.Select(x => double.Parse(x.Groups[1].Value)).ToArray();
0
ответ дан Kevin Smith 17 August 2018 в 12:11
поделиться
  • 1
    Это просто пример, что, если у них есть разные операторы, такие как «-» или «/», вместо «+»? Хороший ответ – Isaac Abramowitz 13 July 2018 в 19:38
  • 2
    Вы на самом деле пытались это сделать? Вы не можете .Select() на matches. – itsme86 13 July 2018 в 19:43
  • 3
    @ itsme86 Да, я проверил это, на самом деле написал тест в xunit ... вообще не компилирует ошибки. – Kevin Smith 13 July 2018 в 19:50
  • 4
    он не компилируется в VS 15.7.5. – itsme86 13 July 2018 в 19:51
  • 5
    Это версия VS, которую я использую ... Я использую System.Text.RegularExpressions @ 4.2.1.0, я предполагаю, что вы используете старую устаревшую версию? 4.0.0.0? nuget.org/packages/System.Text.RegularExpressions/4.3.0 – Kevin Smith 13 July 2018 в 19:54
Другие вопросы по тегам:

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