2016-11-04 1 views
0

Ich muss eine Dezimalzahl aus der Zeichenfolge extrahieren. Momentan benutze ich diese Regex, um eine Dezimalzahl zu finden, aber sie benötigt einen korrekten Dezimalwert.C# Extrahieren Dezimalzahl ohne Punkt

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

wenn ich 2.1 schreiben es gibt mir 1 aber als Schreib .1 es diese Zeichenfolge nicht bewerten.

ich mit einem regex eine Dezimalzahl aus dieser Zeichenfolge extrahieren müssen

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

Wie es zu tun?

+0

Mögliches Duplikat von [Erhalte den Dezimalteil von einem Double] (http://stackoverflow.com/questions/13038482/get-the-decimal-part-from-a-double) –

+0

Warum ist 'SMA (21) .6' eine Nummer? Gibt es noch andere seltsame Testfälle? –

+2

@JericCruz Überhaupt nicht – Rob

Antwort

1

Es scheint, Sie wollen nur 1 oder mehr Ziffern nach einem Punkt extrahieren. Sie können einen einfachen \.(\d+) Regex verwenden, die einen wörtlichen Punkt paßt und dann passen und fangen 1 oder mehr Stellen in Gruppe 1.

Verwenden

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

Siehe regex demo

enter image description here

+0

Ich habe eine andere Situation, in der ich Zeichenfolge extrahieren muss folgen, die manchmal eine Dezimalzahl enthalten und manchmal nicht. Ich habe zwei Zeichenfolge wie diese MACD (C, 26,12,9) SMA (C, 26,12,9) .1 wenn ich diese Regex (MACD) verwenden \ ([^()] * \) \. (? \ d +) es ist nur eine mit Dezimalzahl auszuwählen, aber ich möchte beide auswählen. Was mache ich hier falsch? –

+0

Sie müssen spezifisch sein. Wenn du einen genauen Kontext angeben musst (pass auf '.' nach' MACD', 'SMA' (Forex-Begriffe, ich weiß)), musst du alternieren: [' @ (? N) \ b (MACD | SMA) \ ([^()] * \) \. (? \ d +) "'] (http://regexstorm.net/tester?p=%5cb%28MACD%7cSMA%29%5c%28%5b%5e % 28% 29% 5c *% 5c% 29% 5c.% 28% 3f% 3cdecimal% 3e% 5cd% 2b% 29 & i = MACD% 28C% 2c26% 2c12% 2c9% 29,12 + SMA% 28C% 2c26% 2c12% 2c9 % 29.1 & o = n). –

+0

ist die einzige ausgewählte SMA-Zeichenfolge, aber keine MACD-Zeichenfolge. Muss ich die OR-Bedingung verwenden, um beide auszuwählen? –