Ruby gsub正则表达式将第一个匹配的字符添加回替换的字符串中

时间:2012-02-21 22:06:03

标签: ruby regex gsub

我在ruby下面有一个小的正则表达式片段,用“:〜”代替“:[\ w]”

>> "name: Name, phone_number: Phone Number, inactive: Inactive ".gsub(/[:]\s[\w]/, ': ~')

=> "name: ~ame, phone_number: ~hone Number, inactive: ~nactive "

如何修改gsub表达式以将第一个字符添加回替换后的字符串,即:

  

=> “name:~Name,phone_number:〜Phone Number,inactive:~Inactive”

由于

1 个答案:

答案 0 :(得分:3)

首先,围绕单个字符/特殊字符组不需要[],因为只想将多个字符组合在一起。你的正则表达式相当于/:\s\w/

要解决您的问题,您可以使用捕获组并重新插入捕获的字母:

s.gsub(/:\s(\w)/, ': ~\1')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "

或者使用前瞻不首先替换字母:

s.gsub(/:\s(?=\w)/, ': ~')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "

也许您宁愿使用/:\s+(?=\w)/,这会在下一个字符之前允许多个空格。