宝慕林4294392
您可以使用re.sub(r'\s*(ATK 30)\s*', r' \1 ', text)请参阅正则表达式演示。细节\s*- 0+ 空格\b- 单词边界(ATK 30)\1- 捕获组 1(通过替换模式的反向引用来引用):ATK 30\s*- 0+ 空格如果您有一个单词列表并且需要动态构建的模式,请使用import res = "Product desingATK 30Trace back. TheATK 30 is a nice device. "keywords = ['ATK 30', 'PPK 50', 'HJF12 10']pattern = fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'print(pattern) # => \s*(HJF12\ 10|ATK\ 30|PPK\ 50)\s*print(re.sub(pattern, r' \1 ', s)) # => Product desing ATK 30 Trace back. The ATK 30 is a nice device. 在这里,fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'执行以下操作:map(re.escape, keywords)- 转义每个关键字(以便(或?不能干扰任务)sorted(...,key=len,reverse=True)- 按长度降序排序(第一个选择总是“获胜”,所以这是必要的)"|".join(...)- 创建交替模式。