it-swarm.com.de

Extrahieren Sie eine Teilzeichenfolge aus einer Zeichenfolge in Ruby mit einem regulären Ausdruck

Wie kann ich in Ruby eine Teilzeichenfolge aus einer Zeichenfolge extrahieren?

Beispiel:

String1 = "<name> <substring>"

Ich möchte substring aus String1 Extrahieren (d. H. Alles innerhalb des letzten Vorkommens von < Und >).

111
Madhusudhan
String1.scan(/<([^>]*)>/).last.first

scan erstellt ein Array, das für jedes <item> im String1 enthält den Text zwischen dem < und der > in einem Array mit einem Element (da bei Verwendung eines regulären Ausdrucks, der Erfassungsgruppen enthält, mit scan ein Array erstellt wird, das die Erfassungen für jede Übereinstimmung enthält). last gibt Ihnen das letzte dieser Arrays und first gibt Ihnen dann die Zeichenfolge darin.

118
sepp2k
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"

Sie müssen scan nicht verwenden, wenn Sie nur ein Ergebnis benötigen.
Keine Notwendigkeit, match zu verwenden, wenn wir String[regexp,#].

Siehe: http://Ruby-doc.org/core/String.html#method-i-5B-5D

Hinweis: str[regexp, capture] → new_str or nil

294
Nakilon

Sie können dafür ziemlich einfach einen regulären Ausdruck verwenden ...

Leerzeichen um das Wort herum zulassen (aber nicht beibehalten):

str.match(/< ?([^>]+) ?>\Z/)[1]

Oder ohne die erlaubten Leerzeichen:

str.match(/<([^>]+)>\Z/)[1]
21
coreyward

Hier ist ein etwas flexiblerer Ansatz unter Verwendung der match -Methode. Damit können Sie mehr als eine Zeichenfolge extrahieren:

s = "<ants> <pants>"
matchdata = s.match(/<([^>]*)> <([^>]*)>/)

# Use 'captures' to get an array of the captures
matchdata.captures   # ["ants","pants"]

# Or use raw indices
matchdata[0]   # whole regex match: "<ants> <pants>"
matchdata[1]   # first capture: "ants"
matchdata[2]   # second capture: "pants"
9

Ein einfacherer Scan wäre:

String1.scan(/<(\S+)>/).last
2
Navid