2016-06-06 17 views
1

Ich habe einen String zu erstellen, die ich eine Zeichenfolge wollen über Java oder Python regexp analysieren:Der Versuch, eine regexp

something (\var1 \var2 \var3 $var4 #var5 $var6 *fdsfdsfd @uytuytuyt fdsgfdgfdgf aaabbccc) 

Die Anzahl der var ist nicht bekannt. Ihre genauen Namen sind unbekannt. Ihre Namen können oder dürfen nicht mit "\" oder "$", "*", "@" oder "#" beginnen und sind durch Leerzeichen begrenzt.

Ich würde sie gerne separat analysieren, das heißt, in Capture-Gruppen, wenn möglich. Wie kann ich das machen? Der Ausgang Ich möchte eine Liste von:

[\var1 , \var2 , \var3 , $var4 , #var5 , $var6 , *fdsfdsfd , @uytuytuyt , fdsgfdgfdgf , aaabbccc] 

ich nicht die Java oder Python-Code brauche, ich brauche nur den regulären Ausdruck. Meine unvollständig ist:

something\s\(.+\) 
+2

Warum können Sie nicht einfach eine Split-Methode verwenden, wenn sie nur durch Whitespaces getrennt sind? – JanLeeYu

+0

Java-Regexes sind nicht gut darin, eine variable Nummer eines Musters zu erfassen. Ich denke, Sie müssen die Regex verwenden, mit der Sie begonnen haben, fügen Sie '()' hinzu, um den Teil in Klammern wie 'Something \ s \ ((. +) \)' Einzufangen, extrahieren Sie die Capture-Gruppe in eine Zeichenkette und dann entweder Teilen Sie die aufgenommene Zeichenfolge oder machen Sie etwas anderes, um diese Zeichenfolge zu durchlaufen. Aber Sie können nicht, was Sie wollen, mit einer einzigen Regex, zumindest in Java. Es tut uns leid. – ajb

Antwort

1

something\s\((.+)\)

In diesem regex Sie die Zeichenfolge aufnimmst enthält alle Variablen. Teilen Sie es auf der Grundlage von Leerzeichen auf, da Sie sicher sind, dass sie durch Leerzeichen begrenzt sind.

m = re.search('something\s\((.+)\)', input_string) 
if m: 
    list_of_vars = m.group(1).split() 
+0

Ich kenne Python nicht, aber in Java würde das nicht funktionieren, weil Sie keine Capture-Gruppen definiert haben. Sie müssten einen zusätzlichen Satz Klammern in der Regex benötigen. Funktioniert Python in dieser Hinsicht anders? – ajb

+0

Ich habe gerade überprüft und es sagte, es hatte nur eine Gruppe, die die anfängliche Zeichenfolge 'something ist (\ var1 \ var2 \ var3 $ var4 # var5 $ var6 * fdsfdsfd @uytuuytuyt fdsgfdgfdgf aaabbccc)' – Dett

+0

@ajb, danke. Kopieren Sie einfach die Regexp des OP, obwohl ich die Änderung im Testcode, den ich geschrieben hatte, vorgenommen hatte. Ich habe einen Schnitt gemacht. – SilentMonk