简化的正则表达式,用于修改ruby中的字符串

时间:2016-11-16 19:29:53

标签: ruby regex gsub

这是我原来的字符串:

"Chassis ID TLV\n\tMAC: 00:xx:xx:xx:xx:xx\nPort ID TLV\n\tIfname: Ethernet1/3\nTime to Live TLV\n\t120"

我想将字符串格式化为:

"Chassis ID TLV;00:xx:xx:xx:xx:xx\nPort ID TLV;Ethernet1/3\nTime to Live TLV;120"

所以我使用了以下ruby字符串函数来执行此操作:

y = x.gsub(/\t[a-zA-Z\d]+:/,"\t")
y = y.gsub(/\t /,"\t")
y = y.gsub("\n\t",";")

所以我正在寻找一个单行班轮来做上述事情。因为我不习惯正则表达式,所以我尝试按顺序进行。当我尝试将它们全部放在一起时,我搞砸了。

2 个答案:

答案 0 :(得分:5)

替换以下构造

[\n\r]\t(?:\w+: )?

;,请参阅a demo on regex101.com

答案 1 :(得分:4)

我将其作为一些较小的步骤来解决它:

input = "Chassis ID TLV\n\tMAC: 00:xx:xx:xx:xx:xx\nPort ID TLV\n\tIfname: Ethernet1/3\nTime to Live TLV\n\t120"
input.split(/\n\t?/).map { |s| s.sub(/\A[^:]+\:\s*/, '') }.join(';')
# => "Chassis ID TLV;00:xx:xx:xx:xx:xx;Port ID TLV;Ethernet1/3;Time to Live TLV;120"

通过这种方式,您可以控制每个元素,而不是完全依赖于正则表达式来执行此操作。