首页 > 解决方案 > 使用 re.sub 中的组进行精确匹配

问题描述

我正在尝试更改带有后缀的单词:“-se”、“-a”、“-o”或“-las”,放置一个空格而不是字符“-”。示例:calculou-se -> calculouse。但是,我只想进行完全匹配。没有带来预期的结果。

import re

string = " Calulou-se"
re.sub(r"^([a-zA-Z])(-)(se|a|o|las)$", r"\1 \3", string, flags = re.IGNORECASE)
# Prints:  Calculou-se

标签: python-3.xre

解决方案


第一组可以重复任意次数。所以你需要修复你的正则表达式:

r"^([a-zA-Z]*)(-)(se|a|o|las)$" # note the '*'

或者,更简单:

re.sub(r"-(se|a|o|las)$", r" \1", string, flags = re.IGNORECASE)

推荐阅读