【发布时间】:2020-12-26 08:29:56
【问题描述】:
假设我得到了一个名字列表(名字+名字)。我想匹配列表中由名字和姓氏包围的所有中间名。现在,在 Python 中,我的正则表达式模式字符串是:
regex_str = "|".join([r"\b%s\s+([A-Za-z]+)\s+%s\b" % (first_name, last_name) for (first_name, last_name) in names])
为简单起见,假设为names = [("John", "Smith"), ("Jane", "Doe")]。然后,我们将有regex_str = "\bJohn\s+([A-Za-z]+)\s+Smith\b|\bJane\s+([A-Za-z]+)\s+Doe\b"
现在要遍历一个字符串并将列表中所有“first last”对的所有“first middle last”名称实例更改为简单的“middle”(例如,“John Jack Smith”应该替换为“Jack”) ,我试过了
re.sub(regex_str, r"\1", input_str)
但这仅适用于列表中的第一个名字 (John Smith)。我很快意识到这是因为如果它实际上与列表中的任何其他名称匹配,则捕获组将具有不同的索引,例如 \2 用于第二个名称。有没有办法让捕获组在仍然使用正则表达式的 OR 匹配器的同时获取相应的中间名?
【问题讨论】:
标签: python regex regex-group