0

我对python有点陌生。我试图使用句号作为分隔符从字符串中删除第一句话。split 在这种情况下使用正确的方法吗?我没有得到想要的结果......

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

2 回答 2

1

现在你只得到第二句,没有句号,要解决这个问题,你可以使用字符串的连接方法。这会将列表中的所有元素组合为 1 个字符串,并用字符串分隔。

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

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

于 2013-06-20T12:22:03.540 回答
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

另请注意,上述算法是幼稚的;它会在诸如“St. Louis”或“Lt. Colonel”或“c​​f. foo”之类的东西上中断,这些显然没有嵌入的句子中断。您可以通过检查最后一个词来排除大多数此类误报。然后find()/rfind()和可能的正则表达式是你的朋友。

于 2013-06-20T13:06:36.553 回答