1

たとえば、次の文字列があります

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

私はo / pが欲しい

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

フォローしてみた

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

それは私に与えます

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

では、各部分文字列の開始インデックスを取得するにはどうすればよいでしょうか?

4

3 に答える 3

3

これは実際には非常に重要なタスクであり、SO に関する他の質問でかなり議論されています。これが最も一般的な解決策です。

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};"}
于 2013-06-19T08:45:17.283 に答える
1

スキャンを使用するものは次のとおりです。

offset = 0
string.scan(/(#\S*)([^#]*)/).map{|m| v = "#{m[0]}|#{offset}|#{m[0].length};"; offset += m.join.length; v}.join
#=> "#Sachin|0|7;#Tendulkar|29|10;#Sachin|63|7;"
于 2013-06-19T08:51:49.377 に答える