使用正则表达式更改语法

时间:2014-08-12 12:21:54

标签: ruby regex

我在chef(配置管理工具)中使用ruby语法时遇到了一些麻烦。

我正在处理的差异是分配以下属性:

runner = ChefSpec::Runner.new(platform: "ubuntu", version: version)
runner = ChefSpec::Runner.new(:platform => "ubuntu", :version => version)

我需要能够在这两种语法之间切换,因为它们似乎适用于不同版本的chef / ruby​​ - 我们将进行升级,但现在需要修复。

我是regexp的新手,但在python中尝试过这样:

for line in fileinput.input(inplace=1, backup='.bak'):
  line = re.sub('(\w\w...): ',':"\1" =>', line.rstrip())
  print(line)

我不知道属性名称是什么,或者在它之前是什么,只有单个:跟随一个单词(2个或更多个字符)。我很高兴假设在:之后总会有一个空格,但我似乎遇到了麻烦并且#34;拾起"要替换的属性名称,以后再重复使用。

1 个答案:

答案 0 :(得分:1)

以下内容应该有效:

for line in fileinput.input(inplace=1, backup='.bak'):
  line = re.sub('(\w+): ', ':\g<1> => ', line.rstrip())
  print(line)

请参阅regex demorepl demo