0

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

这是一个示例字符串:

"JohnnyCuetoJ.J.PutzBrianMcCann"

这是所需的输出:

Johnny Cueto
J.J. Putz
Brian McCann

我已经想出了如何用大写字母进行分隔,这让我很接近,但是离群值的名字喜欢J.J.McCann弄乱了这种模式。有人对解决此问题的最佳方法有想法吗?

4

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 "

...当然,您可以通过链接调用将其放在一行中gsub,但这基本上会破坏代码的可读性(但另一方面,正则表达式块的可读性如何?)

于 2012-07-11T16:39:23.437 回答