我对python有点陌生。我试图使用句号作为分隔符从字符串中删除第一句话。split 在这种情况下使用正确的方法吗?我没有得到想要的结果......
def get_summary(self):
if self.description:
s2 = self.description.split('.', 1)[1]
return s2
else:
return None
现在你只得到第二句,没有句号,要解决这个问题,你可以使用字符串的连接方法。这会将列表中的所有元素组合为 1 个字符串,并用字符串分隔。
def get_summary(self):
if self.description:
s2 = ".".join(self.description.split('.')[1:])
return s2
else:
return None
使用 [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”或“cf. foo”之类的东西上中断,这些显然没有嵌入的句子中断。您可以通过检查最后一个词来排除大多数此类误报。然后find()
/rfind()
和可能的正则表达式是你的朋友。