替换相同字符的序列

2024-10-01 02:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,替换utf-8文本中3个或更多相同字符序列的最快方法是什么?我需要用2个字符替换3个或更多相同字符的序列。 一、 e

aaa -> aa 
bbbb -> bb
abbbcd -> abbcd
124xyyyz3 -> 124xyyz3

Tags: 方法文本序列字符utfaabbaaa
3条回答
>>> import re
>>> re.sub(r'(\w)\1{2,}', r'\1\1', 'aaa')
'aa'
>>> re.sub(r'(\w)\1{2,}', r'\1\1', 'bbbb')
'bb'

可以使用正则表达式:

import re
re.sub(r'(.)\1{2,}', r'\1\1', 'bbbbbaaacc')

模式捕获跟在同一字符后面重复两次或更多次的任何字符,并匹配此子字符串。替换只将匹配的子字符串替换为捕获的字符中的两个。点不会替换重复的新行,请使用(.|\n)re.DOTALL标志。在

它也适用于Unicode:

^{pr2}$

如果您有一个包含utf-8文本的字符串变量x,请使用x.decode('utf-8')。在

虽然对于这种特定的情况,我会使用正则表达式,但您也可以在任意序列上使用此泛型to运算符,例如:

from itertools import groupby, chain, islice

s = 'abaaaaaabbbbbbbbcdcddddde'
print ''.join(chain.from_iterable(islice(g, 2) for k, g in groupby(s)))
# abaabbcdcdde

相关问题 更多 >