给定字符串:
老師說:「你們要記住國父說的『青年要立志做大事,不要做大官』這句話。」
任务是根据一组分隔符标点来拆分字符串,即
^{pr2}$所需输出为:
[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']
我看过Python: Split string with multiple delimiters,使用re.split
的解决方案非常简洁:
>>> 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'']
注意:抱歉,由于某些原因,所以认为打印的字符串是垃圾邮件,所以您必须使用字节号=(
但是re.split
的结果丢弃了所需的分隔符。在
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?
我还尝试先用空格填充所有标点符号,然后根据空格拆分:
>>> 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']
有没有更简单的方法来达到同样的期望输出?在
Document:
您可以将
puncts
列表转换为正则表达式,以便按如下方式拆分:给你:
^{pr2}$最终列表理解用于删除任何空匹配项。在
相关问题 更多 >
编程相关推荐