2015-11-16 52 views
4

我試圖通過使他們的形式Firstname Lastlame表明他們的名字。這適用於下面的代碼,但我希望能夠捕獲像Pär Åberg這樣的國際名稱。我找到了一些解決方案,但他們確實不似乎不適用於Python風格的正則表達式。任何人都有這樣的感覺?匹配表單上的名字名字姓氏與國際字符

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import re 

text = """ 
This is a text containing names of people in the text such as 
Hillary Clinton or Barack Obama. My problem is with names that uses stuff 
outside A-Z like Swedish names such as Pär Åberg.""" 

for name in re.findall("(([A-Z])[\w-]*(\s+[A-Z][\w-]*)+)", text): 
    firstname = name[0].split()[0] 
    print firstname 
+0

小心帶捕獲組和findall。 –

+0

對於姓氏,您可以搜索空格之間的任何字符 – Onilol

+0

嘗試're.findall(r'[AZ] [\ w - ] *(?:\ s + [AZ] [\ w - ] *)+')' –

回答

1

你需要一個替代regex library,因爲你可以使用\p{L} - 任何Unicode字母

然後,使用

ur'\p{Lu}[\w-]*(?:\s+\p{Lu}[\w-]*)+' 

當使用Unicode字符串來初始化正則表達式,所述UNICODE標誌自動使用:

如果不指定ASCIILOCALE也不UNICODE標誌時,它會如果正則表達式模式是Unicode字符串,則缺省爲UNICODE;如果是字符串,則缺省爲ASCII

+0

工作就像一個魅力!除了用正則表達式更新之外,我只需要將'firstname = name [0] .split()[0]'編輯爲'firstname = name.split()[0]'。 – cowboyvspirate