全名的正则表达式

时间:2019-01-13 09:45:10

标签: python regex

我希望我的正则表达式表达式包含所有类型的全名。 例如:约翰·肯尼迪(John F. Kennedy),肯尼迪(J.F. Kennedy),约翰·肯尼迪(John Kennedy)等。

([A-Z][a-zA-Z]+)[ ]*(?:\s[^\s]+)?\s([A-Z][a-zA-Z]+)

我最初写的是这个,但我注意到肯尼迪(J.F. Kennedy)将不被包括在内。我希望找到所有类型的名称。 如果有人可以帮助我解决此问题,将非常感谢,谢谢!
另外,[ ]*\s之间有区别吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下正则表达式:/^([A-Z]([a-z]+|\.)\s*){2,3}$/

它指定名称的每个部分必须以大写字母开头,后跟点号或小写字母,并且名称中可以包含2到3个部分。

演示:https://regex101.com/r/cfCquW/2

答案 1 :(得分:1)

根据您对“名称”的定义,结果可能会有所不同。

一种可能性:

  1. 我们开头有一个大写字母
  2. 后跟一个句点或任意数量的小写字母和尾随空格
  3. 1)和2)后跟任意数量的空格,并至少重复一次
  4. 我们有一个大写字母,然后是一个或多个小写字母(完整的姓氏)。

此示例导致了正则表达式(?:[A-Z](?:\.|[a-z]+ )\s*)+[A-Z][a-z]+

如果要缩写姓氏,请不要使用最后一部分。 如果您想在名称中使用'`-,请插入它们。