2016-07-02 10 views
0

Nehmen wir an, wir folgende Strings haben:Regex für Match Datentyp und Präzision

NUMBER 
NUMBER(10) 

Ich brauche einen regulären Ausdruck, die Thesen Strings übereinstimmt:

NUMBER  => Group(0) = NUMBER 
NUMBER(10) => Group(0) = NUMBER, Group(1) = 10 

Der folgende Ausdruck dies zu tun, aber es scheint ein bisschen hässlich zu mir:

Das ist in 21 Schritten übersetzt. Da ich kein Regex-Experte bin, kann mir jemand helfen, diesen Ausdruck zu verbessern, um ihn schneller zu machen?

+0

Das erste, was zu erwähnen ist: Was stimmt nicht mit deinem Ausdruck? Gibt es falsche Übereinstimmungen zurück? Gibt es dann einen Teil der Zeichenfolge, die statisch ist? Gibt es immer Ziffern in Klammern? Schauen Sie [hier] (https://regex101.com/r/aZ3lZ3/2). Sie haben die Sprache nicht angegeben, BTW, es ist wichtig. –

+1

Eine andere Sache, die bemerkenswert ist: die Anzahl der Schritte zeigt nicht direkt die Leistung an. –

+1

Nun, ['(\ w +) (?: \ ((\ D +))?'] (Https://regex101.com/r/aZ3lZ3/3) sieht am kürzesten aus. –

Antwort

1

Dies scheint einfacher:

([^(]+)(?:\((.+?)\))? 

Regex101 sagt 6 Schritte für "NUMBER" und 13 für "NUMBER(10)".

Sie könnten das Hinzufügen von ^ zum Start und $ zum Ende hinzufügen, um strenger zu sein, in diesem Fall steigt die Schrittzahl um 2 für jedes Eingabebeispiel.