我是新来的红宝石和正则表达式,并试图找出如何攻击将附加的棒球运动员字符串分为姓/名组合。如何用正则表达式分割名称?
这是一个示例字符串:
"JohnnyCuetoJ.J.PutzBrianMcCann"
这是所需的输出:
Johnny Cueto
J.J. Putz
Brian McCann
我已经找到了如何用大写字母来分隔这让我接近,但异常的名称,如J.J.
和McCann
混乱的模式。任何人都有想法解决这个问题的最佳方法?
我是新来的红宝石和正则表达式,并试图找出如何攻击将附加的棒球运动员字符串分为姓/名组合。如何用正则表达式分割名称?
这是一个示例字符串:
"JohnnyCuetoJ.J.PutzBrianMcCann"
这是所需的输出:
Johnny Cueto
J.J. Putz
Brian McCann
我已经找到了如何用大写字母来分隔这让我接近,但异常的名称,如J.J.
和McCann
混乱的模式。任何人都有想法解决这个问题的最佳方法?
如果你不必在一个单一的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呢?)
它看起来像你的数据缺少一些分隔符,你应该看看为什么。数据来自哪里?你在刮网页吗? – 2012-07-11 17:52:23
当你将这些名字混合在一起时,你应该如何猜测哪些名字属于一起组成一个人?在这个世界上有一些人,从一个到四个或更多的名字部分。 – 2012-07-11 21:25:17