如何在python中将多个连续的重复字符替换为1个字符?

use*_*101 0 python string

我在python中有一个字符串,我想将多个连续的重复字符替换为1。例如:

st = "UUUURRGGGEENNTTT"
print(st.replace(r'(\w){2,}',r'\1'))
Run Code Online (Sandbox Code Playgroud)

但是这个命令似乎不起作用,请有人帮忙找出这个命令有什么问题吗?

还有一种方法可以解决这个问题,但想了解为什么上述命令失败以及有什么方法可以纠正它:

print(re.sub(r"([a-z])\1+",r"\1",st)) -- print URGENT
Run Code Online (Sandbox Code Playgroud)

HSL*_*SLM 7

你需要使用正则表达式。所以你可以这样做:

import re

re.sub(r'[^\w\s]|(.)(?=\1)', '', 'UUURRRUU')
Run Code Online (Sandbox Code Playgroud)

结果是 UR。

这是我所拥有的快照:

在此处输入图片说明

对于这个正则表达式: (.)(?=.*\1)

(.) means: match any char except new lines (line breaks)
?=. means: lookahead every char except new line (.) 
* means: match a preceding token
\1 means: to mach the result of captured group, which is the U or R ...
Run Code Online (Sandbox Code Playgroud)

然后用''替换所有匹配项

你也可以检查这个: lookahead

也检查这个工具我用它解决了我的正则表达式,它描述了一切,你可以从中学到很多东西: regexer