如果句子以标点符号结尾,则无需插入空标记即可有效地分割标点符号

时间:2017-05-14 08:46:12

标签: python regex split

我需要在python中的标点符号上拆分句子。

这个命令几乎可以正常工作:

re.split('\W+', line.lower().strip(), flags=re.UNICODE)

问题在于,如果句子的最后一个字符是标点符号,则最后一个标记是无效标记。

我该如何避免?

我想要一个允许我不插入空令牌的解决方案。之后我无法取消它:在我看来,效率是一个问题,因为我需要在非常大的文本集上运行这个命令。

1 个答案:

答案 0 :(得分:3)

您可以将re.findall\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.

SIDE注意:您最好使用r'raw string literals'来避免将反斜杠用作转义序列。

替代方法:将字符串传递给re.split

,而不传递非单词字符
>>> re.split(r'\W+', re.sub(r'\W+$', '', line.lower().strip()), flags=re.UNICODE)
['hello', 'world']

注意:您也可以删除前导非单词字符。要处理双方,请使用^\W+|\W+$模式。