我使用的是python3,我有两个字符串:abbcabb
和{}。我想删除一个单个字符的每一次重复出现。例如:
abbcabb
应给出c
,而{}应给出{}。在
我尝试了以下regex(here):
(.)(.*?)\1
但是,它为第一个字符串提供了错误的输出。另外,当我尝试另一个(here)时:
^{pr2}$
但是,这一次又给出了错误的输出。这里怎么了?在
python代码是一个print语句:
print(re.sub(r'(.)(.*?)\1', '\g<2>', s)) # s is the string
Tags:
^{1}$re.sub()
不执行重叠替换。在它替换第一个匹配项之后,它开始查找匹配项的结束。所以当你在它首先将
abbca
替换为bbc
。然后它将bb
替换为一个空字符串。它不会返回并在bbc
中查找另一个匹配项。在如果你想要,你需要写你自己的循环。在
^{pr2}$DEMO
网站解释得很好,悬停并使用解释部分。在
(.)(.*?)\1
不删除或匹配每个重复出现的情况。它匹配1个字符,然后是中间的任何字符,直到再次遇到同一个字符为止。在因此,对于
abbcabb
,“三明治”部分应该是两个a
之间的bbc
编辑: 您可以在不使用正则表达式的情况下尝试类似这样的方法:
^{1}$请注意,这会产生字符串的“最后一次”奇数出现,而不是第一次。在
对于已知的“第一次”事件,您应该使用此answer中建议的计数器。只需改变条件来检查奇数。
pseudo code(count[letter] %2 == 1)
不需要正则表达式就可以解决它,如下所示
^{1}$相关问题 更多 >
编程相关推荐