正则表达式中的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+))?$
正则表达式详细信息
^
- 字符串开头
(?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)?
- 匹配可选字符序列的可选非捕获组:Mr
、Ms
、Mrs
、Miss
、Jr
或 Sr
后有一个可选的 .
和 1+ 个空格
(?P<first_name>\w+)
- 组“first_name”:一个或多个单词字符
(?:\s+(?P<last_name>\w+))?
- - 可选的非捕获组匹配 1+ 个空格,然后捕获到组“last_name”1 个或多个单词字符
$
- 字符串结尾。
我有以下字符串:
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+))?$
正则表达式详细信息
^
- 字符串开头(?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)?
- 匹配可选字符序列的可选非捕获组:Mr
、Ms
、Mrs
、Miss
、Jr
或Sr
后有一个可选的.
和 1+ 个空格(?P<first_name>\w+)
- 组“first_name”:一个或多个单词字符(?:\s+(?P<last_name>\w+))?
- - 可选的非捕获组匹配 1+ 个空格,然后捕获到组“last_name”1 个或多个单词字符$
- 字符串结尾。