<p>您正在打印<code>_sre.SRE_Match</code>的字符串表示形式,它不能保证打印所有匹配的字符。我查看了CPython源代码,发现了以下<a href="https://github.com/python/cpython/blob/fbb490fd2f38bd817d99c20c05121ad0168a38ee/Modules/_sre.c#L2314" rel="nofollow noreferrer">implementation</a>:</p>
<pre><code>static PyObject *
match_repr(MatchObject *self)
{
PyObject *result;
PyObject *group0 = match_getslice_by_index(self, 0, Py_None);
if (group0 == NULL)
return NULL;
result = PyUnicode_FromFormat(
"<%s object; span=(%d, %d), match=%.50R>",
Py_TYPE(self)->tp_name,
self->mark[0], self->mark[1], group0);
Py_DECREF(group0);
return result;
}
</code></pre>
<p>如您所见,它只输出组的前50个字符。你知道吗</p>
<p>您可以使用以下正则表达式进行检查:</p>
<pre><code>In [52]: print(re.compile('.*').search('a' * 48))
<_sre.SRE_Match object; span=(0, 48), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
In [53]: print(re.compile('.*').search('a' * 49))
<_sre.SRE_Match object; span=(0, 49), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
In [54]: print(re.compile('.*').search('a' * 50))
<_sre.SRE_Match object; span=(0, 50), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
</code></pre>
<p>如您所见,<code>match</code>总是小于或等于50个字符。你知道吗</p>
<p>要获得实际匹配的字符串,可以使用<code>group</code>方法:</p>
<pre><code>In [55]: print(re.compile('.*').search('a' * 50).group(0))
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
In [56]: print(len(re.compile('.*').search('a' * 50).group(0)))
50
</code></pre>