我是ruby和正则表达式的新手,并试图弄清楚如何攻击将附加的棒球运动员串分成名/姓名组合。
这是一个示例字符串:
"JohnnyCuetoJ.J.PutzBrianMcCann"
这是所需的输出:
Johnny Cueto
J.J. Putz
Brian McCann
我已经想出了如何用大写字母分隔,这些大写字母让我很接近,但像J.J.
和McCann
之类的离群值这些图案混乱了。任何人都有关于最佳方法的想法吗?
答案 0 :(得分: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 "
...当然你可以通过链接gsub
调用将它放在一行上,但这基本上会破坏代码的可读性(但另一方面,一个块的可读性如何regexen无论如何?)