2017-02-19 17 views
0

Ich versuche, das letzte Komma (', ') in einer beliebigen Zeichenfolge mit ' & ' zu ersetzen.Ersetzen Sie das letzte Komma in einer Zeichenfolge durch '&' - Ruby

Ich möchte keine Regex verwenden.

Gibt es eine Methode, die ich, dass erfüllt die folgenden psuedo-Code verwenden können:

find last x in string 
replace last x with y 
+0

Warum möchten Sie Regexps vermeiden? – spickermann

+0

hast du uns deinen Versuch nicht gezeigt ..? – Irfan

+0

Eine Regex-Lösung ist "Sieh nichts Böses, höre nichts Böses, sprich nichts Böses." Sub (/.* \ K, \ s /, '&') # => "Sehe nichts Böses, höre nichts Böses und sprich nichts Böses. "' –

Antwort

4

Die sub Methode ersetzt nur das erste Vorkommen, so dass Sie wieder reverse, sub und reverse können.

"Ruby on Rails, Ruby, String, Replace".reverse.sub(',', '& ').reverse

+0

Gleiche Idee, aber du warst etwas schneller ... ;-) – spickermann

+0

Danke! das hat den Trick – mtaff

+0

@mtaff Ich bin froh, zu helfen. Wenn es für Sie funktioniert, können Sie es bitte akzeptieren? –

0

Vielleicht:

string = string.rpartition("&").map do |x| 
    if x == "&" 
     "," 
    else 
     x 
    end 
end.join("") 

funktioniert?

+0

Ich denke 'gsub' ersetzt alle Vorkommen. Allerdings möchte ich nur das letzte Vorkommen ersetzen – mtaff

1

A One-Pass-Lösung:

>> "Lions, tigers, bears".tap{|s| s[s.rindex(', '), 2] = ' & '} 
=> "Lions, tigers & bears" 
  • tap weist einen Variablennamen an die Stringliteral in der es Blocks. Dies ist nicht notwendig, wenn der Zeichenfolge bereits ein Name zugewiesen ist.
  • rindex findet das letzte Vorkommen seines Arguments in der aufgerufenen Zeichenfolge.
  • s[idx, len] = str ersetzt die len -lengthed Teilzeichenfolge in s an Position idx mit str
0

Sie können rund um das letzte Komma dies mit einfangenden Gruppen tun:

>> "one, two, three, four".gsub(/(.*),(.*)/, '\1 &\2') 
=> "one, two, three & four" 

Diese Gruppen um die letzten , Übereinstimmen weil die erste einfangende Gruppe (die erste (.*)) gierig ist. .* wird so viel Text wie möglich übereinstimmen, was bedeutet, dass es bis zum letzten , übereinstimmen wird, dann wird die zweite Erfassungsgruppe (.*) übereinstimmen, was übrig ist.

Die Ersetzungszeichenfolge ('\1 &\2') platziert dann den Erfassungsgruppen-Text um eine &.

Verwandte Themen