如何使用正则表达式拆分名称?

时间:2012-07-11 16:24:39

标签: ruby regex

我是ruby和正则表达式的新手,并试图弄清楚如何攻击将附加的棒球运动员串分成名/姓名组合。

这是一个示例字符串:

"JohnnyCuetoJ.J.PutzBrianMcCann"

这是所需的输出:

Johnny Cueto
J.J. Putz
Brian McCann

我已经想出了如何用大写字母分隔,这些大写字母让我很接近,但像J.J.McCann之类的离群值这些图案混乱了。任何人都有关于最佳方法的想法吗?

1 个答案:

答案 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无论如何?)