2017-02-14 1 views
1

Mein Eingang 1+1 oder 1-1 oder 2+9 oder 3-12 oder 31-10 oder 11+11 ist und wie weiseRegex Match String mit + oder - zwischen

versuchte ich

^\d*[\+\-]\d*$ 

Es funktioniert, aber was ich brauche ist, dass der Eingang wie +1 oder +2 oder +31 oder 1+ oder 7+ oder -1 oder -2 oder -31 oder 1- oder 7- sollte nicht übereinstimmen.

+0

wenn Sie auch übereinstimmen möchten, wenn es einen optioanl Leerzeichen zwischen 1 und +^\ d + \ s * [\ + \ -] \ s * \ d + $ – lordkain

+0

, wenn Sie '*' in '+' ändern und entfernen unnesesery '\' in '[]' Ihre Regex ist corect –

Antwort

1

ersetzen * mit +:

var pat = @"^\d+[+-]\d+$"; 

ein demo of how this regex works See.

Die + quantifier wird ein oder mehrere Instanzen einer Zifferneingabe wie -, +, 1+ oder -2 disallowing entsprechen.

Außerdem müssen Sie nicht entkommen + oder - im [-+] Zeichenklasse (- nicht entgangen sein muss, wie es bei seinem Start/Ende).

Hier ist ein C# demo:

var strs = new string[] {"1+1","1-1","2+9","3-12","31-10","11+11","+1","+2","+31","1+","7+","-1","-2","-31","1-","7-"}; 
foreach (string s in strs) 
{ 
    var matched = Regex.IsMatch(s, @"^\d+[+-]\d+$"); 
    Console.WriteLine("{0}: {1}", s, matched); 
} 

Ausgang:

1+1: True 
1-1: True 
2+9: True 
3-12: True 
31-10: True 
11+11: True 
+1: False 
+2: False 
+31: False 
1+: False 
7+: False 
-1: False 
-2: False 
-31: False 
1-: False 
7-: False 
+0

Wenn Sie auch Standalone '-' und' + 'anpassen müssen, müssen Sie eine Alternationsgruppe erstellen, wie' @ "^ (?: \ d + [+ -] \ d + | [- +]) $ "'. Obwohl ich bezweifle, dass du das brauchst. –

+1

Arbeitete, vielen Dank – sujitgr8

0

, wenn Sie möchten, passen auch wenn es ein optionales Leerzeichen zwischen 1 und + u kann regex verwenden

^\d+\s*[+-]\s*\d+$ 

suchen Sie zum Beispiel unter https://regex101.com/r/bpCjKM/2

Erklärung regex

/ 
^\d+\s*[\+\-]\s*\d+$ 
/
g 
^ asserts position at start of the string 
\d+ matches a digit (equal to [0-9]) 
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\s* matches any whitespace character (equal to [\r\n\t\f\v ]) 
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
Match a single character present in the list below [\+\-] 
\+ matches the character + literally (case sensitive) 
\- matches the character - literally (case sensitive) 
\s* matches any whitespace character (equal to [\r\n\t\f\v ]) 
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
\d+ matches a digit (equal to [0-9]) 
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy) 
$ asserts position at the end of the string, or before the line terminator right at the end of the string (if any) 
Global pattern flags 
g modifier: global. All matches (don't return after first match) 
0

Für Eingabe versuchen diese (d Ersetzen Sie Ihren regulären Ausdruck des * zu +)

^\d+[\+\-]\d+$

* bezeichnet null oder mehr Vorkommen.

+ bezeichnet ein oder mehrere Vorkommen.