正则表达式中的groupdict

groupdict in regex

我有以下字符串:

string = "Malcolm Reynolds"

我为此编写了一个正则表达式,它将查找用户的名字和姓氏:

m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
m.groupdict()

结果:

{'first_name': 'Malcolm', 'last_name': 'Reynolds'}

有时,我不知道姓氏。那时,我的正则表达式失败了。有人对此有任何想法吗?

您可以使用

^(?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)?(?P<first_name>\w+)(?:\s+(?P<last_name>\w+))?$

regex demo

正则表达式详细信息

  • ^ - 字符串开头
  • (?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)? - 匹配可选字符序列的可选非捕获组:MrMsMrsMissJrSr 后有一个可选的 . 和 1+ 个空格
  • (?P<first_name>\w+) - 组“first_name”:一个或多个单词字符
  • (?:\s+(?P<last_name>\w+))? - - 可选的非捕获组匹配 1+ 个空格,然后捕获到组“last_name”1 个或多个单词字符
  • $ - 字符串结尾。