<p>您可以向每个<code>[...]</code>子字符串或字符串中找到的任何其他字符追加一个空格,然后<code>rstrip</code>返回结果:</p>
<pre class="lang-py prettyprint-override"><code>>>> df1['letters'].str.replace(r'\[[^][]*]|.', r'\g<0> ', regex=True).str.rstrip()
0 A B C D E [NOT] F G H
1 C C G F [NOT] H I
2 M P J [NOT] L
3 M N A [NOT] P L J K A J S H D
Name: letters, dtype: object
</code></pre>
<p>见<a href="https://regex101.com/r/3EVA8H/1" rel="nofollow noreferrer">this regex demo</a></p>
<p>另一种方法是在与<code>\[[^][]*]</code>模式匹配的字符之外的任何字符周围添加空格,然后<code>str.strip()</code>返回结果:</p>
<pre class="lang-py prettyprint-override"><code>>>> df1['letters'].str.replace(r'(\[[^][]*])|.', lambda x: x.group(1) if x.group(1) else f" {x.group()} ", regex=True).str.strip()
0 A B C D E [NOT] F G H
1 C C G F [NOT] H I
2 M P J [NOT] L
3 M N A [NOT] P L J K A J S H D
Name: letters, dtype: object
</code></pre>
<p><code>(\[[^][]*])|.</code>正则表达式匹配并捕获到组1中的<code>[</code>,然后是除<code>[</code>和<code>]</code>之外的任何零个或多个字符,然后是<code>]</code>字符,或除换行字符以外的任何字符,如果捕获到,则替换为组1值,否则替换为“空格”+匹配值+“空格”</p>
<p>如果替换操作中出现任何前导/尾随空格,则<code>str.strip()</code>将删除这些空格</p>