2016-06-08 13 views
1

Ich versuche, einen Teil des Textes zu extrahieren, die in Klammern in einer Textzeichenfolge eingebettet ist:Regex Matching in Julia

"Dominion Diamond Corporation (DDC) " 

(Ich möchte extrahieren DDC).

die interwebs Durchlesen legt nahe, dass der reguläre Ausdruck

"\([^)]*\)" 

nützlich sein wird.

Ich versuche folgendes:

ret = Regex(regExp) 
match(ret, "Dominion Diamond Corporation (DDC) ") 

Ausgang:

RegexMatch("Dominion Diamond Corporation (DDC", 1="Dominion Diamond Corporation (DDC") 

Allerdings, wenn ich geben Sie den regulären Ausdruck in die Match-Funktion direkt:

match(r"\([^)]*\)"t, "Dominion Diamond Corporation (DDC) ") 

Die Ausgabe lautet:

RegexMatch("(DDC)") 

Warum/wie unterscheiden sich diese beiden Ausdrücke? Wie interpoliere ich einen beliebigen Regex-Ausdruck in den ersten Arg für die Übereinstimmung?

+1

'r" string "' bedeutet normalerweise rohe Zeichenfolge (d. H. Python). Ich vermute, dass es die Backslashes vorher abstreifte. Ich habe keine Ahnung, warum es am Ende ein 't' gibt. – Laurel

+0

Blick zurück auf mein Notebook, ich denke, das "t" war ein Kopieren/Einfügen Fehler – pyrex

Antwort

4

Wie @Laurel in einem Kommentar vorschlägt, schafften es die einzelnen Backslashes nicht bis zur match Funktion.

julia> rstring = "\\([^)]*\\)" 
"\\([^)]*\\)" 

julia> match(Regex(rstring), "Dominion Diamond Corporation (DDC) ") 
RegexMatch("(DDC)") 
+0

danke; Wahrscheinlich sollte dies zunächst einmal gedacht werden. – pyrex

+0

Nur hinzufügen, in Julia, "r" ... "bedeutet" Konstrukt RegEx mit ... ", so Backslashes für die Bequemlichkeit beibehalten werden. –