回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>给定字符串:</p>
<pre><code>老師說:「你們要記住國父說的『青年要立志做大事,不要做大官』這句話。」
</code></pre>
<p>任务是根据一组分隔符标点来拆分字符串,即</p>
^{pr2}$
<p>所需输出为:</p>
<pre><code>[u'\u8001\u5e2b\u8aaa', u'\uff1a', u'\u300c', u'\u4f60\u5011\u8981\u8a18\u4f4f\u570b\u7236\u8aaa\u7684', u'\u300e', u'\u9752\u5e74\u8981\u7acb\u5fd7\u505a\u5927\u4e8b', u'\uff0c', u'\u4e0d\u8981\u505a\u5927\u5b98', u'\u300f', u'\u9019\u53e5\u8a71', u'\u3002', u'\u300d']
</code></pre>
<p>我看过<a href="https://stackoverflow.com/questions/4998629/python-split-string-with-multiple-delimiters">Python: Split string with multiple delimiters</a>,使用<code>re.split</code>的解决方案非常简洁:</p>
<pre><code>>>> x = u'\u8001\u5e2b\u8aaa\uff1a\u300c\u4f60\u5011\u8981\u8a18\u4f4f\u570b\u7236\u8aaa\u7684\u300e\u9752\u5e74\u8981\u7acb\u5fd7\u505a\u5927\u4e8b\uff0c\u4e0d\u8981\u505a\u5927\u5b98\u300f\u9019\u53e5\u8a71\u3002\u300d'
>>> [i for i in re.split(u"[{}]".format("|".join(puncts)), x, re.U)]
[u'\u8001\u5e2b\u8aaa', None, u'', None, u'\u4f60\u5011\u8981\u8a18\u4f4f\u570b\u7236\u8aaa\u7684', None, u'\u9752\u5e74\u8981\u7acb\u5fd7\u505a\u5927\u4e8b', None, u'\u4e0d\u8981\u505a\u5927\u5b98', None, u'\u9019\u53e5\u8a71', None, u'', None, u'']
</code></pre>
<p>注意:抱歉,由于某些原因,所以认为打印的字符串是垃圾邮件,所以您必须使用字节号=(</p>
<p>但是<code>re.split</code>的结果丢弃了所需的分隔符。在</p>
<pre><code>Is there a way to keep the delimiters from `re.split`?
Are there other ways to split the string using the `puncts` list as multiple delimiters and achieved the desired output?
</code></pre>
<hr/>
<p>我还尝试先用空格填充所有标点符号,然后根据空格拆分:</p>
<pre><code>>>> y = x
>>> for p in puncts:
... y = y.replace(p, u' {} '.format(p))
...
>>> y
u'\u8001\u5e2b\u8aaa \uff1a \u300c \u4f60\u5011\u8981\u8a18\u4f4f\u570b\u7236\u8aaa\u7684 \u300e \u9752\u5e74\u8981\u7acb\u5fd7\u505a\u5927\u4e8b \uff0c \u4e0d\u8981\u505a\u5927\u5b98 \u300f \u9019\u53e5\u8a71 \u3002 \u300d '
>>> y.split()
[u'\u8001\u5e2b\u8aaa', u'\uff1a', u'\u300c', u'\u4f60\u5011\u8981\u8a18\u4f4f\u570b\u7236\u8aaa\u7684', u'\u300e', u'\u9752\u5e74\u8981\u7acb\u5fd7\u505a\u5927\u4e8b', u'\uff0c', u'\u4e0d\u8981\u505a\u5927\u5b98', u'\u300f', u'\u9019\u53e5\u8a71', u'\u3002', u'\u300d']
</code></pre>
<p>有没有更简单的方法来达到同样的期望输出?在</p>