2016-11-04 3 views
0

Мне нужно извлечь десятичное число из строки. В настоящее время я использую это регулярное выражение, чтобы найти десятичное число, но ему нужно правильное десятичное значение.C# Извлечь десятичное число с периодом

var value = Regex.Match(formula, @"(?n)\d+(\.(?<decimal>\d+))?"); 
      return value.Groups["decimal"].Success ? int.Parse(value.Groups["decimal"].Value) : 0; 

, если я пишу 2.1 это дает мне 1 но когда пишут .1 он не оценивает эту строку.

Мне нужно извлечь десятичное число из них строки с одним регулярным выражением

2.1 = 1 
.5 = 5 
SMA(21).6 = 6 

Как это сделать?

+0

Возможный дубликат [Получить десятичную часть из двойника] (http://stackoverflow.com/questions/13038482/get-the-decimal-part-from-a-double) –

+0

Почему SMA (21) .6 номер? Существуют ли какие-либо другие особые тесты? –

+2

@JericCruz Совсем нет – Rob

ответ

1

Кажется, вы просто хотите извлечь 1 или более цифр после точки. Вы можете использовать простую \.(\d+) регулярное выражения, которое соответствует буквальной точке, а затем соответствует улавливает 1 или более цифр в группу 1.

Использования

var m = Regex.Match(formula, @"\.(\d+)"); 
var res = string.Empty; 
if (m.Success) 
{ 
    res = m.Groups[1].Value; 
} 

Смотрите regex demo

enter image description here

+0

У меня есть другая ситуация, в которой мне нужно извлечь строку, за которой иногда следует десятичное число, а иногда и нет. У меня две строки: MACD (C, 26,12,9) SMA (C, 26,12,9) .1 , когда я использую это регулярное выражение (MACD) \ ([^()] * \) \. (? \ d +) его только выберите один с десятичным числом, но я хочу выбрать оба. Что я здесь делаю неправильно? –

+0

Вы должны быть конкретными. Если вам нужно указать точный контекст (совпадение '.' после' MACD', 'SMA' (термины Forex, я знаю)), вам нужно использовать чередование: [' @ "(? N) \ b (MACD | SMA) \ ([^()] * \) \. (? \ d +) "'] (http://regexstorm.net/tester?p=%5cb%28MACD%7cSMA%29%5c%28%5b%5e % 28% 29% 5d *% 5c% 29% 5с.% 28% 3f% 3cdecimal% 3e% 5CD% 2b% 29 & я = MACD% 28С% 2c26% 2C12% 2C9% 29,12 + SMA% 28С% 2c26% 2C12% 2C9 % 29,1 & о = п). –

+0

его единственная строка SMA, но не строка MACD. Нужно ли использовать условие ИЛИ для выбора обоих? –

Смежные вопросы