Регулярное выражение (?<=[\+\-\*\/])-?[.\d]+
требует (поскольку (?<=...)
является положительным взглядом сзади) -
, +
, *
или /
перед необязательным -
, а затем 1+ цифры или точки. Вы можете изменить логику и использовать негативный взгляд, который будет проверять, нет ли другого символа, кроме -
, +
, *
или /
перед числом.
Говоря о сопоставлении числа: [.\d]+
не обязательно соответствует цифре, она может соответствовать строке .....
. Вам следует подумать об изменении его на \d+(?:\.\d+)?
или \d*\.?\d+
.
Кроме того, вам не нужно экранировать математические операторы, если вы используете [+/*-]
класс символов.
Итак, вы можетерешить проблему, используя
var results = Regex.Matches(text, @"(?<![^+/*-])-?\d*\.?\d+")
.Cast<Match>()
.Select(x => x.Value);
См. демонстрационную версию regex
Подробнее
(?<![^+/*-])
- началостроки или позиции, которой непосредственно предшествует +
, -
, *
или -
-?
- необязательный -
\d*
- 0+ цифр \.?
- опционально .
\d+
- 1+ цифр.