2010-11-08 55 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