/ / Ruby's gsub für die Neuanordnung eines Strings - Ruby, Regex, Debugging

Ruby's gsub zum Umordnen einer Zeichenkette - Ruby, Regex, Debugging

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 № 1

Sie 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(" | ")