cool77
cool77

Reputation: 1136

simplified regex for modifying a string in ruby

Here is my original string:

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

and i want the string to be formatted as :

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

so i used following ruby string functions to do it:

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

so i am looking for a one liner to do the above. since i am not used to regex, i tried doing it sequentially. i am messing it up when i try to do all of them together.

Upvotes: 1

Views: 104

Answers (2)

tadman
tadman

Reputation: 211610

I'd tackle it as a few smaller steps:

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"

That way you have control over each element instead of being entirely dependent on the regular expression to do it as one shot.

Upvotes: 4

Jan
Jan

Reputation: 43169

Replace the following construct

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

with ;, see a demo on regex101.com.

Upvotes: 5

Related Questions