Angenommen, ich habe eine Zeichenfolge wie "abc | xyz" und "I" dverwandle es gerne in "xyz | abc", indem nur reguläre Ausdrücke eingesetzt werden. (Für dieses Beispiel gibt es vielleicht bessere Möglichkeiten, aber dies ist ein Ersatz für etwas Haarigeres.)
Der folgende Code tut nicht das, was ich erwarte:
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x
Ist es offensichtlich, was ich falsch mache? Danke!
Antworten:
4 für die Antwort № 1Sie müssen die umgekehrten Schrägstriche in Ihrer Ersatzzeichenfolge vermeiden. Zum Beispiel,
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "\2 | \1")
puts x
oder nur
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x
und für Bonuspunkte einen einfacheren regulären Ausdruck:
x = "abc | xyz"
x = x.gsub(/(.*) | (.*)/, "2 | 1")
puts x
4 für die Antwort № 2
Und es gibt immer mehr als eine Möglichkeit, dies zu tun.
"abc | xyz".split(" | ").reverse.join(" | ")