1

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

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

3 回答 3

12
>>> import re
>>> re.sub(r'(\w)\1{2,}', r'\1\1', 'aaa')
'aa'
>>> re.sub(r'(\w)\1{2,}', r'\1\1', 'bbbb')
'bb'
于 2013-05-14T12:28:50.703 回答
6

您可以使用正则表达式:

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

模式捕获任何字符后跟重复两次或更多次的相同字符并匹配此子字符串。替换仅用两个捕获的字符替换匹配的子字符串。点不会替换重复的新行,使用(.|\n)re.DOTALL标记。

它也适用于 Unicode:

re.sub(r'(.)\1{2,}', r'\1\1', u'жжж')

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

于 2013-05-14T12:28:15.567 回答
1

尽管对于这种特定情况,我会使用正则表达式,但您也可以在任意序列上将其设为通用运算符,例如:

from itertools import groupby, chain, islice

s = 'abaaaaaabbbbbbbbcdcddddde'
print ''.join(chain.from_iterable(islice(g, 2) for k, g in groupby(s)))
# abaabbcdcdde
于 2013-05-14T13:44:23.437 回答