Python字符串句子删除

时间:2013-06-20 12:17:18

标签: python string

我是python的新手。我试图使用句号作为分隔符从字符串中删除第一个句子。在这个实例中拆分正确的方法吗?我没有得到理想的结果......

def get_summary(self):
    if self.description:
        s2 = self.description.split('.', 1)[1]
        return s2
    else:
        return None

2 个答案:

答案 0 :(得分:1)

现在你只得到第二个没有完整停止符号的序列来解决这个问题,你可以使用join-method作为字符串。这会将列表中的所有元素组合成1个字符串,用字符串分隔。

def get_summary(self):
    if self.description:
        s2 = ".".join(self.description.split('.')[1:])
        return s2
    else:
        return None

使用[1:]将为您提供一个包含第二个元素的新元素,以及列表中此元素之后的所有元素。

答案 1 :(得分:1)

虽然split()是正确的,但它不是最佳的:它会无用地拆分整个文本,而您只想要第一次出现。

使用partition()将返回3元组:

first_sentence, separator, the_rest = text.partition('.') # or '. '
# if you don't care about the first sentence, it can be written shorter:
_, _, the_rest = text.partition('.')

请注意,如果文本中没有分隔符(句号),则会删除整个文本,并留下空字符串。如果您想更优雅地处理这个问题,请尝试以下方法:

def chopFirstSentence(text):
  first_sentence, _, the_rest = text.partition('. ')
  return the_rest or first_sentence

这是有效的,因为如果the_rest为空,则会评估为False,然后会返回first_sentence。如果the_rest不为空,则or的计算将会短路并立即返回the_rest

另请注意,上述算法是天真的;它会破坏像“圣路易斯”或“中校”或“cf. foo”这样的东西,显然没有嵌入句子。你可以通过查看最后一个单词来排除这种大多数误报。然后find() / rfind()和可能的正则表达式是你的朋友。