<h3>一般</h3>
<p>诀窍是匹配所需范围的单个字符,然后确保匹配同一字符的所有重复:</p>
<pre><code>>>> matcher= re.compile(r'(.)\1*')
</code></pre>
<p>它匹配任何单个字符(<code>.</code>),如果有,则匹配其重复(<code>\1*</code>)。</p>
<p>对于输入字符串,您可以获得所需的输出:</p>
<pre><code>>>> [match.group() for match in matcher.finditer('aacbbbqq')]
['aa', 'c', 'bbb', 'qq']
</code></pre>
<p>注意:由于匹配组,<code>re.findall</code>将无法正常工作。</p>
<h3>其他范围</h3>
<p>如果您不想匹配<em>任何</em>字符,请相应地更改正则表达式中的<code>.</code>:</p>
<pre><code>>>> matcher= re.compile(r'([a-z])\1*') # only lower case ASCII letters
>>> matcher= re.compile(r'(?i)([a-z])\1*') # only ASCII letters
>>> matcher= re.compile(r'(\w)\1*') # ASCII letters or digits or underscores
>>> matcher= re.compile(r'(?u)(\w)\1*') # against unicode values, any letter or digit known to Unicode, or underscore
</code></pre>
<p>对照<code>u'hello²²'</code>(Python 2.x)或<code>'hello²²'</code>(Python 3.x)检查后者:</p>
<pre><code>>>> text= u'hello=\xb2\xb2'
>>> print('\n'.join(match.group() for match in matcher.finditer(text)))
h
e
ll
o
²²
</code></pre>
<p>如果您首先发出了一个<a href="http://docs.python.org/library/locale.html#locale.setlocale" rel="noreferrer">^{<cd8>}</a>调用,则可能会修改针对非Unicode字符串的<code>\w</code>/bytearray。</p>