使用正则表达式重复匹配大写的姓氏

时间:2012-08-08 05:50:36

标签: python regex

我试图将书中的名字与欧洲风格的名字相匹配。 OCR做了一个平庸的工作,所以姓氏大写的事实很重要。然而,可以有多个姓氏,如Luc ASSELIN DE WILLIENCOURT或Marie-Sophie DUFAU-RICHET。

我提出了以下解决方案,但我确信有更好的方法,我想知道是否有人可以做得更好......为了便于阅读,我打破了几行的正则表达式......     

names = regex.compile("[\p{Lu}][\p{Ll}]+
                     (?:[\p{Pd}][\p{Lu}][\p{Ll}]+ | )
                     (?:[\p{Lu}][\p{Lu}'\p{Pd}]*)
                     (?: [\p{Lu}][\p{Lu}'\p{Pd}]*){0,5}", flag=regex.UNICODE)

ntest = ['Michèle DUBROCARD magistrate', ' Marie-Sara durur Marie-  Sara.Durur@justice.gouv.fr Tél. : 01 70 22 41 71', 
'Jean-Pierre KELCHE, général d\'armée','ÉriC LE CLERCQ DE LANNOY', 'ÉriC LE CLERCQ DE LANNOY, fucker',
 'Éric LE CLERCQ DE LANNOY shlaphead', "john smith proctologist", 'John smith     Proctolog', 'john smith, proctolog', "N...", "GHESTEM", "Bill linebreaker,"
"his honorable Baron VAN BULL and her hc Marie-Eunice DELAGARDE"]

for i in range(0, len(ntest)):
    print(regex.findall(names,ntest[i]))

这产生了我想要的东西,但它非常难看。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我不能说我理解为什么你的正则表达式正常工作,所以我的第一个建议是使用re.VERBOSE标志并稍微记录你的正则表达式(http://docs.python.org/library/re.html#re.VERBOSE)。

我不知道这是一个复制粘贴错误,但是当你在多行上分解正则表达式时,你应该使用三重引号。

哦,并使用原始字符串(r""" ... """)。