Ruby的gsub用于重新排列字符串

时间:2010-09-30 22:11:11

标签: ruby regex debugging

假设我有一个类似“abc | xyz”的字符串,我想只使用正则表达式替换将其转换为“xyz | abc”。 (对于这个例子,可能有更好的方法,但这是一个毛茸茸的事情的替身。)

以下代码不符合我的预期:

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

我做错了很明显吗?谢谢!

2 个答案:

答案 0 :(得分:4)

您需要转义替换字符串中的反斜杠。例如,

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

或只是

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

和奖励积分,更简单的正则表达式:

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

答案 1 :(得分:4)

总有不止一种方法可以做到这一点..

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