用单个fullstop替换多个fullstop

时间:2015-12-05 11:15:57

标签: python regex nltk

如何使用单个完整停止替换多个句点,以便NLTK句子标记符可以将它们区分为2个不同的句子

例如

a = "the food was good...what about the bread huh..Awesome"

如果我使用

nltk.sent_tokenize(a)

它给了我

['the food was good...what about the bread huh..Awesome']

但我想要的是

['the food was good.', 'what about the bread huh.', 'Awesome']

我该怎么做?

2 个答案:

答案 0 :(得分:7)

您可以通过regex and substitute使用多个点的出现次数来执行此操作,如下所示:

#!/usr/bin/env python3
# coding: utf-8

import re

a = "the food was good...what about the bread huh..Awesome"
a_replaced = re.sub(r'\.+', ".", a)

给你:

'the food was good.what about the bread huh.Awesome'

此外,我会给你一个关于它是如何工作的小解释。 re.sub()接受应更换的regex模式。在我们的例子中,这是r'\.+'

让我们更深入地了解这种模式。由于您正在寻找点.,我们需要抓住它们。但是,通常在正则表达式中使用点符号.来匹配任何不是我们想要实现的字符。为了匹配点.而不是任何字符,我们需要通过在给出\.的点前添加反斜杠来转义此字符。

由于我们想要找到任何点的出现,我们不知道会有多少点,我们只是通过将+附加到我们的匹配组来实现“一个或多个”。 {1}}。

我们有一个正在运行的正则表达式:/.我们传递给/.+以向Python显示这是一个正则表达式而不是普通字符串。接下来,如re.sub() docs中所述,我们需要指定一个我们想要放置的字符串而不是我们的正则表达式模式。这只是一个点r'\.+',因为您想要用一个点替换多个点。我们传递的第三个参数是您的字符串".",我们需要在其中执行所需的替换。

我不想做任何广告,但为了快速了解Python中的正则表达式,我可以建议this cheat sheet

答案 1 :(得分:0)

您也可以将re.split用于此目的。它还会返回一个列表

a="the food was good...what about the bread huh..Awesome"
sr = re.split("\.+", a)
print sr

你得到了

['the food was good', 'what about the bread huh', 'Awesome']

干杯!