0

私はルビーと正規表現が初めてで、添付された野球選手の文字列を姓名の組み合わせに分割して攻撃する方法を見つけようとしています。

これはサンプル文字列です:

"JohnnyCuetoJ.J.PutzBrianMcCann"

これは望ましい出力です:

Johnny Cueto
J.J. Putz
Brian McCann

私は大文字で区切る方法を理解しましたが、外れ値の名前が好きで、そのパターンJ.J.McCann台無しにします. これにアプローチする最善の方法についてアイデアを持っている人はいますか?

4

1 に答える 1

1

1 回で行う必要がない場合gsubは、少し簡単になります。

string = "JohnnyCuetoJ.J.PutzBrianMcCann"
string.gsub!(/([A-Z][^A-Z]+)/, '\1 ') # separate by capital letters
string.gsub!(/(\.) ([A-Z]\.)/, '\1\2') # paste together "J. J." -> "J.J."
string.gsub!(/Mc /, 'Mc') # Remove the space in "Mc "
string.strip # Remove the extra space after "Cann "

...そしてもちろん、呼び出しを連鎖させることでこれを1行に入れることができますがgsub、それは基本的にコードの可読性を損ないます(しかし一方で、正規表現のブロックはとにかく読みやすいでしょうか?)

于 2012-07-11T16:39:23.437 に答える