2016-04-11 8 views
-1

Das Ziel von this Regex(\w*)\s*\([(\w*),]*\) ist, einen Funktionsnamen und seine Argumente zu erhalten.Parse Formel Name und Argumente mit Regex

Zum Beispiel gegeben f1 (11,22,33)

der Regex sollte vier Elemente erfassen:

f1 11 22 33

Was ist mit dieser Regex falsch?

+0

Sie scheinen Leerzeichen für die Argumente zu erfassen. Es scheint auch, dass diese Regex nur eine Liste von Kommas als Argument aufnehmen kann, da '(\ w *)' sogar Sequenzen der Länge Null (von Leerzeichen) anzeigen würde. Und dem letzten Argument für die Funktion muss hier ein Komma folgen; Möglicherweise müssen Sie eine separate Gruppe für das letzte Argument hinzufügen. – Evert

+0

Sie können keine Sonderzeichen in '[]' verwenden. Verwenden Sie auch keine Regex für diese – hop

+0

Ich bezweifle, dass Sie Gruppierung Klammern in einem Zeichensatz verwenden können. – Evert

Antwort

1

Sie können es mit split tun Hier ist ein Beispiel in javascript

var ar = str.match(/\((.*?)\)/); 
if (ar) { 
    var result = ar[0].split(","); 
} 

Referenz: https://stackoverflow.com/a/13953005/1827594

+0

Danke, Ihre Antwort hat mich näher, siehe https://regex101.com/r/pX0nQ6/7 – ps0604

0

Manche Dinge sind schwer für reguläre Ausdrücke :-)

Als die oben commen sagen, '*' kann zu lasch sein. Es bedeutet null oder mehr. So passt auch foo(,,). Nicht so gut.

(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\) 

Das ist näher an was Sie wollen, denke ich. Lass uns das durchbrechen. Diese

\w+ <-- The function name, has to have at least one character 
\s* <-- zero or more whitespace 
\( <-- parens to start the function call 
(\w+) <-- at least one parameter 
(?:) <-- this means not to save the matches 
,\s* <-- a comma with optional space 
(\w+) <-- another parameter 
\s* <-- followed by optional space 

ist das Ergebnis von Python:

>>> m = re.match(r'(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)', "foo(a,b,c)") 
>>> m.groups() 
('foo', 'a', 'c') 

Aber was ist so etwas wie dieses:

foo(a,b,c 
    d,e,f) 

?? Ja, es wird schnell mit Regexes und Sie gehen zu reicheren Parsing-Tools.

+0

gibt es ein Problem mit Ihrem Regex, siehe https://regex101.com/r/pX0nQ6/5 – ps0604

+0

Ja, die Freuden versuchen, eine Frage zu beantworten, bevor sie nach Hause gehen. –

+0

Sie können alle neuen Zeilen und zusätzliche Leerzeichen vor dem Ausführen der Regex – ps0604