python - 如果句子以标点符号结尾,则在不插入无效标记的情况下分割标点符号的有效方法

标签 python regex split

我需要在Python中按标点符号分割句子。

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

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

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

如何避免这种情况?

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

最佳答案

您可以使用 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.

旁注:您最好使用r'raw string literals'以避免反斜杠用作转义序列。

<小时/>

替代方案:将不带尾随非单词字符的字符串传递给 re.split:

>>> re.split(r'\W+', re.sub(r'\W+$', '', line.lower().strip()), flags=re.UNICODE)
['hello', 'world']

注意:您还可以去除前导非单词字符。要处理两侧,请使用 ^\W+|\W+$ 模式。

关于python - 如果句子以标点符号结尾,则在不插入无效标记的情况下分割标点符号的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962018/

相关文章:

javascript - 使用正则表达式删除引号内的引号

python - 如何在Python中指定不同的第一个单词

python - 我的正则表达式适用于 regex101 但不适用于 python?

Python正则表达式替换

asp.net - 检查文本框文本是否为 6 个或更多字符长的 RegularExpressionValidator 上的表达式是什么?

java - 如何使用 "+"、 "-"、 "*"和 "/"等基本分隔符拆分字符串,同时不使用句点作为分隔符?

r - 根据列表项的行拆分列表

machine-learning - train_test_split - 没有随机,有原始顺序

python - 单击 : Is it possible to pass multiple inputs to CliRunner. 调用?

python - Django-Haystack 没有返回确切的查询