我是python的新手。我试图使用句号作为分隔符从字符串中删除第一个句子。在这个实例中拆分正确的方法吗?我没有得到理想的结果......
def get_summary(self):
if self.description:
s2 = self.description.split('.', 1)[1]
return s2
else:
return None
答案 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()
和可能的正则表达式是你的朋友。