Python 如果句子以标点符号结尾,在不插入空标记的情况下拆分标点符号的有效方法

Python 如果句子以标点符号结尾,在不插入空标记的情况下拆分标点符号的有效方法,python,regex,split,Python,Regex,Split,我需要在python中用标点符号拆分句子 此命令几乎可以正常工作: re.split('\W+', line.lower().strip(), flags=re.UNICODE) 问题是,如果句子的最后一个字符是标点符号,那么最后一个标记就是无效标记 我怎样才能避免呢 我想要一个解决方案,允许我不插入无效令牌。我不能在事后取消它:在我的情况下,效率是一个问题,因为我需要在非常大的文本语料库上运行此命令。您可以使用\W+来代替尝试按非单词(\W+)字符进行拆分: >>> lin

我需要在python中用标点符号拆分句子

此命令几乎可以正常工作:

re.split('\W+', line.lower().strip(), flags=re.UNICODE)
问题是,如果句子的最后一个字符是标点符号,那么最后一个标记就是无效标记

我怎样才能避免呢


我想要一个解决方案,允许我不插入无效令牌。我不能在事后取消它:在我的情况下,效率是一个问题,因为我需要在非常大的文本语料库上运行此命令。

您可以使用
\W+
来代替尝试按非单词(
\W+
)字符进行拆分:

>>> line = 'Hello world!'
>>> re.findall(r'\w+', line.lower(), flags=re.UNICODE)
['hello', 'world']
# `.strip()` was remove because `\w+` does not match whitespaces.
旁注:您最好使用以避免反斜杠用作转义序列


备选方法:将不带尾随非单词字符的字符串传递给
重新拆分

>>> re.split(r'\W+', re.sub(r'\W+$', '', line.lower().strip()), flags=re.UNICODE)
['hello', 'world']
注意:您也可以去掉前导的非单词字符。要处理两面,请使用
^\W+\W+$
模式