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.
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
Sie können keine Sonderzeichen in '[]' verwenden. Verwenden Sie auch keine Regex für diese – hop
Ich bezweifle, dass Sie Gruppierung Klammern in einem Zeichensatz verwenden können. – Evert