2010-11-08 46 views
1

我有三个样品TWiki的名字:简单的Python重新前瞻帮助

names = [ "JohnDoe", "JaneMcAdams", "BillyBobThorton" ]

我想下面的背: *李四 *简·麦克亚当斯 * BillyBob桑顿

现在我有这在胸前帽子分开他们(这是一件好事)。

re.findall('[A-Z][^A-Z]*', name)

我怎么不理 “MC” 的分裂?

谢谢!

回答

3

我会建议不要在这里使用正则表达式。我怀疑Mc是你需要匹配的唯一名字。你有没有想过Mac,O,Van,Von,De?

我建议打破他们,你说你现在做,手动建立名字和姓氏。

奖金。正则表达式:

re.findall('(?:Mc|Mac|O|Van|Von|De)?[A-Z][^A-Z]*', name) 

但Van,Von,De应该用空格分隔。

注意:如果您认为您只想匹配McSomething,请使用短版本(?:Mc)?[A-Z][^A-Z]*

+0

在这种情况下,Mc是唯一一个。我知道我会如何正确地做到这一点,但这是一种破解。 grr .. – rh0dium 2010-11-08 18:32:13

+0

行 - 在中间怎么回合3个字母或更多? – rh0dium 2010-11-08 18:32:59

+0

请参阅编辑。我还添加了一个正则表达式。 – 2010-11-08 18:38:32