2010-01-19 8 views
7

Ist in Python auf dieses praktische Dienstprogramm für reguläre Ausdrücke gestoßen (ich bin ein Anfänger in Python). z.B. Durch die Verwendung der regexpSymbolische Gruppennamen (wie in Python) in Ruby Regulärer Ausdruck

(?P<id>[a-zA-Z_]\w*) 

ich die passenden Daten als

m.group('id') 

beziehen (vollständige Dokumentation: suchen Sie nach "symbolische Gruppenname" here)

In Ruby können wir den Zugriff auf Passende Referenzen unter Verwendung von $1, $2 oder mit dem MatchData-Objekt (m[1], m[2] usw.). Gibt es etwas Ähnliches wie Pythons Symbolic Group Names in Ruby?

+0

Wenn Sie in 1.8 sind und Onigurama aus irgendeinem Grund nicht verwenden können, könnte eine interessante Alternative die Bibliothek von Jim Weirich sein (http://github.com/jimweirich/re) –

Antwort

11

ältere Ruby-Versionen haben keine Gruppen genannt, aber, wenn Sie mit Ruby 1.9 ... (tx Alan für diesen Hinweis in einem Kommentar aus!):

(?<name>subexp) drückt eine benannte Gruppe in Ruby Ausdrücke auch; \k<name> ist die Art, wie Sie eine benannte Gruppe als Ersatz referenzieren, wenn Sie das suchen!

+3

Beachten Sie, dass benannte Gruppen sind ein Merkmal der neuen Oniguruma Regex-Engine. Er hat Rubys alte, unterentwickelte Regex-Engine vor kurzem in Ruby 1.9 ersetzt, also gibt es eine Menge Referenzmaterial, das die Änderung nicht aufgeholt hat. –

+0

@Alan, danke - Bearbeiten Sie das A, um dies zu verdeutlichen. –

+2

Es gibt ein Oniguruma Juwel für 1,8, obwohl Sie Oniguruma zu installieren brauchen werden zunächst in der Lage sein, es zu benutzen - http://oniguruma.rubyforge.org/index.xhtml – kejadlen

10

Ruby 1.9 eingeführt namens Captures:

m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.") 
m.names # => ["prefix", "hyphen", "digits"] 
m.captures # => ["THX", "", "1138"] 
m[:prefix] # => "THX" 

Sie \k<prefix> verwenden können, etc, für Rückverweise.

+0

Ja - mit dem Oniguruma-Motor. – arnab