首页 > 解决方案 > 使用正则表达式消除单词内的重复并在末尾添加标签

问题描述

我对正则表达式很陌生,很难处理单词中的重复情况。我想要做的是匹配任何至少有三个连续重复字母的单词,例如“whateeever”、“cooool”和“haaaapy”,只保留一个重复的字母,然后添加一个“(elong)”到词尾。例如,“whateeever”变成“whatever(elong)”,“cooool”变成“col(elong)”,“haaaapy”变成“happy(elong)”。

以下是我所做的,但它只能消除重复,比如“whateeever”变成“whatever”:

def re_sub(pattern, repl):
    return re.sub(pattern, repl, text, flags=FLAGS)
text = re_sub(r"(\S*?)(.)\2{2,}", r"\1\2")

然后我将代码稍微更改为以下代码,但输出变为“whate (elong) ver”。

text = re_sub(r"(\S*?)(.)\2{2,}", r"\1\2 (elong)")

我想知道是否有一种方法可以将“(elong)”移动到最后?非常感谢!

标签: pythonregex

解决方案


简单的是将正则表达式与字符串连接结合起来:

for w in ('whateeever', 'cooool','haaaapy'):
    print re.sub(r'([a-zA-Z])\1+', r'\1', w)+' (elong)'

推荐阅读