/ / Ruby's gsub do zmiany kolejności napisów - ruby, regex, debugowanie

Gsub Ruby do zmiany ciągu znaków - ruby, regex, debugowanie

Załóżmy, że mam ciąg taki jak „abc | xyz” i I „dlubię zamieniać go w „xyz | abc” używając tylko podstawienia wyrażeń regularnych. (W tym przykładzie mogą istnieć lepsze sposoby, ale jest to zastępstwo dla czegoś bardziej włochatego).

Poniższy kod nie działa zgodnie z oczekiwaniami:

x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x

Czy to oczywiste, co robię źle? Dzięki!

Odpowiedzi:

4 dla odpowiedzi № 1

Musisz uciec z ukośników odwrotnych w łańcuchu zastępczym. Na przykład,

x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "\2 | \1")
puts x

Lub tylko

x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x

a dla punktów bonusowych prostsze wyrażenie:

x = "abc | xyz"
x = x.gsub(/(.*) | (.*)/, "2 | 1")
puts x

4 dla odpowiedzi nr 2

I zawsze jest na to więcej niż jeden sposób ...

 "abc | xyz".split(" | ").reverse.join(" | ")