基于模式划分为句子

时间:2017-01-27 09:09:44

标签: python regex

我想基于python中的分隔符将文本分成句子。但是,我不想根据数字之间的小数点或数字之间的逗号分割它们。我们如何忽略它们。

例如,我有一个如下文字。

I am xyz.I have 44.44$. I would like, to give 44,44 cents to my friend. 

句子必须是

I am xyz
I have 44.44$
I would like
to give 44,44 cents to my friend

请你帮我正则表达式。如果以前已经提出这个问题,我很抱歉。我找不到。

谢谢

1 个答案:

答案 0 :(得分:4)

这适用于您的示例,但如果重要的话,最后一部分会有一个尾随句号(句点)。

import re

s = 'I am xyz. I have 44.44$. I would like, to give 44,44 cents to my friend.'

for part in re.split('[.,]\s+', s):
    print(part)

<强>输出

I am xyz
I have 44.44$
I would like
to give 44,44 cents to my friend.

Wiktor的表达式\s*[.,](?!\d)\s适用于您的新示例:

I am xyz.I have 44.44$. I would like, to give 44,44 cents to my friend.

打破这个局面:

  • \s*将匹配0到许多空白字符。
  • [.,]将匹配,.字符。
  • 如果此时匹配数字,
  • (?!\d)将导致匹配被丢弃。这是避免在数字内分裂的必要条件。
  • \s将匹配单个空格字符。

请注意,对于像“我22。10年前我12岁”这样的句子,它仍然会失败,尽管我认为没有办法单独使用正则表达式解决这个问题。