首页 > 解决方案 > 没有空格时如何用分号分隔 2 个完整名称(并排除以“Mc”开头的名称

问题描述

我正在寻找创建一个正则表达式来帮助分隔有时没有空格的全名。例如:

import re
s = "Bob JonesAlex Smith"
print(re.sub(r"([A-Z][a-z]+)([A-Z][a-z]+)", r"\1; \2", s))

这会正确打印“Bob Jones; Alex Smith”。

但是,当我有以“Mc”开头的名称(例如“McMahon”)时,它不会按预期工作。例子:

import re
s = "Bob McJonesAlex Smith"
print(re.sub(r"([A-Z][a-z]+)([A-Z][a-z]+)", r"\1; \2", s))

以上将打印“Bob Mc; JonesAlex Smith”。

任何可以帮助排除这种模式的正则表达式想法?

标签: pythonregexstring

解决方案


如果您查看了所有数据集,并且在某些人的名字的开头看到了 Mc,您可以试试这个,

([A-Z](Mc)?[a-z]+)([A-Z](Mc)?[a-z]+)

“?” 是一个量词,它将检查其前身元素 1 或 0 次


推荐阅读