3

我正在尝试为名称编写正则表达式。姓名可以选择以头衔开头(博士、夫人等),也可以包含两个或三个姓名,中间名可以选择缩写为 (X.)

例如,应匹配以下名称:

  • 杰夫·T·沃克博士
  • 苏珊·B·安东尼
  • 迈克尔·宾厄姆顿先生
  • 乔治布什夫人

以下不应该匹配

  • 加菲猫
  • J博士
  • T. 疼痛
  • 美利坚合众国
  • 2020 年 2 月 15 日

这是我所拥有的:

^(Dr\.|Mr\.|Mrs\.)?[A-Z][a-z]+\s([A-Z][a-z]+|[A-Z]\.)\s[A-Z][a-z]+?

我不太确定我在哪里出错了。

4

1 回答 1

3

^((Dr|Mr|Mrs)\. )?[A-Z][a-z]+( [A-Z]([a-z]+|\.))? [A-Z][a-z]+

这是我为解决它所做的:

  • 在前缀后添加一个空格 - 之前,您匹配的是“Dr.James”,而不是“Dr. James”
  • 在姓氏之后删除了最后的问号 - 如果不在括号之后,则?导致“惰性匹配” - 匹配尽可能少的字符(在这种情况下为 1)
  • 使中间名可选
  • 删除了一些冗余(例如前缀和中间名)
  • 替换\s为空格 - 它更易于阅读,并且 \s 匹配制表符、换行符等。
于 2013-03-05T19:31:45.013 回答