【发布时间】:2018-07-01 04:18:43
【问题描述】:
我想将巴西名字分成几部分。然而,下面有一些名称,其中"de"、"da"(和其他)不是单独的部分,它们总是与以下单词一起使用。所以正常的拆分是行不通的。
test1 = "Francisco da Sousa Rodrigues" #special split
test2 = "Emiliano Rodrigo Carrasco" #normal split
test3 = "Alberto de Francia" #special split
test4 = "Bruno Rezende" #normal split
我的预期输出是:
[Francisco, da Sousa, Rodrigues] #1
[Emiliano, Rodrigo, Carrasco] #2
[Alberto, de Francia] #3
[Bruno, Rezende] #4
对于特殊情况我尝试了这种模式:
PATTERN = re.compile(r"\s(?=[da, de, do, dos, das])")
re.split(PATTERN, test1) (...)
但输出不是我所期望的:
['Francisco', 'da Sousa Rodrigues'] #1
['Alberto', 'de Francia'] #3
知道如何解决吗?有没有办法在“正常”和“特殊”情况下只使用一种模式?
【问题讨论】:
-
@pawelty 好的 OP。 为什么要拆分名称?
-
我想计算每个部分在 Firstname 中出现的频率以及在 Surname 中出现的频率。然后,根据我们的编辑指南,我会将它们分成第一/中间/姓氏字段。在 100% 的情况下它可能并不完美,但我们可以接受。
-
@pawelty 就正则表达式而言,我没有更好的解决方案,但为什么你不只是拆分所有内容然后遍历结果列表,搜索“de”并将其与列表中的下一项作为字符串?在概念上似乎更容易,但我猜你有一个性能原因,对吧?不要误解,不要质疑你的方法,恰恰相反——想了解别人在做什么
标签: python regex python-3.x