2016-07-27 3 views
0

Ich habe eine Zeichenfolge wie zum Beispiel:Wie extrahiert man eine Gruppenübereinstimmung mit dem Array?

<?xml version="xyzt" standalone="112.0" sxcx="xcxc"?> 

I die Zeichenfolge Array extrahiert werden soll, wobei jedes Element ein Attribut der Zeichenfolge wie [version="xyzt", standalone="112.0", sxcx="xcxc"].

Ich versuchte mit string.scan(/\s\w+="\.*"/) do |block| puts block end, aber ich bekomme kein Ergebnis .. Bitte sagen Sie mir, warum und wie ich es tun kann.

+0

Nun, das regex nichts in dieser Zeichenfolge übereinstimmt. Daher keine Ausgabe. –

+0

Ich bin mir sicher, dass Sie den Literalpunkt nicht null oder mehrere Male abgleichen wollen. Verwenden Sie http://regex101.com, es ist großartig. –

+3

Bitte verwenden Sie einen tatsächlichen XML-Parser (zB [Nokogiri] (http://www.nokogiri.org/)) anstelle von [XML mit Regex parsen] (https://stackoverflow.com/questions/1732348/regex-match) -open-Tags-except-xhtml-in sich geschlossene-Tags /). –

Antwort

0
string[/(?<=\<\?xml).*(?=\?>)/] 
#⇒ 'version="xyzt" standalone="112.0" sxcx="xcxc"' 

Wenn Sie es mit eckigen Klammern umgeben:

?[ << string[/(?<=\<\?xml).*(?=\?>)/] << ?] 
#⇒ '[version="xyzt" standalone="112.0" sxcx="xcxc"]' 

Um einen Hash von Attributen zu erhalten:

string[/(?<=\<\?xml).*(?=\?>)/].split(/\s+/) 
           .map { |e| e.split('=') } 
           .to_h 
#⇒ { 
# "standalone" => "\"112.0\"", 
#  "sxcx" => "\"xcxc\"", 
#  "version" => "\"xyzt\"" 
# } 
+0

Er will Array von Attributen. –

+0

@SergioTulentsev In der Tat, danke. – mudasobwa

+0

Danke @mudasobwa –

0
str = '<?xml version="xyzt" standalone="112.0" sxcx="xcxc"?>' 

Ich gehe davon aus Sie das Array erzeugen möchten:

['version="xyzt"', 'standalone="112.0"', 'sxcx="xcxc"'] 

Sie können das tun, wie folgt:

arr = str.scan(/[a-z]+\=\S+/) 
    #=> ["version=\"xyzt\"", "standalone=\"112.0\"", "sxcx=\"xcxc\"?>"] 

puts arr 
# version="xyzt" 
# standalone="112.0" 
# sxcx="xcxc"?> 
Verwandte Themen