Monday, November 4, 2019

How to find out the starting point for each match in ruby



Say, i have a following string




string = "#Sachin is Indian cricketer. #Tendulkar is right hand batsman. #Sachin has been honoured with the Padma Vibhushan award "


I want o/p as



"#Sachin|0|7;#Tendulkar|29|10;#Sachinn|63|7;"


I tried following




 new_string = ""
string.scan(/#\S+/).each{|match| new_string+="#{match}|#{string.index(match)}|#{match.length};" }


which gives me



 "#Sachin|0|7;#Tendulkar|29|10;#Sachin|0|7;" 


So how i will get the starting index of each sub-string?



Answer



This is actually quite a non-trivial task, and has been discussed quite a bit in other questions on SO. This is the most common solution:



string = "#Sachin is Indian cricketer. #Tendulkar is right hand batsman. #Sachin has been honoured with the Padma Vibhushan award "
new_string = string.to_enum(:scan,/#\S+/i).inject(''){|s,m| s + "#{m}|#{$`.size}|#{m.length};"}

No comments:

Post a Comment

hard drive - Leaving bad sectors in unformatted partition?

Laptop was acting really weird, and copy and seek times were really slow, so I decided to scan the hard drive surface. I have a couple hundr...