将文本中句子的第一个单词大写

时间:2019-02-09 01:16:00

标签: python string split capitalize

我想确保文本中的每个句子都以大写字母开头。

例如这位外星大使对总理说:“我们有关于你的使者进入世界的好消息和坏消息。”好消息是他们尝起来像鸡肉。”应该成为

“我们有关于你的使者到我们世界的好消息和坏消息,”外星大使告诉总理。好消息是他们尝起来像鸡肉。”

我尝试使用split()拆分句子。然后,我大写每行的第一个字符。我将字符串的其余部分附加到大写字符上。

  text = input("Enter the text: \n")
  lines = text.split('. ') #Split the sentences

  for line in lines:
      a = line[0].capitalize() # capitalize the first word of sentence
      for i in range(1, len(line)):
           a = a + line[i] 
      print(a)

我想获得“我们对你的使者到世界的好消息和坏消息,”这位外星大使告诉总理。好消息是他们尝起来像鸡肉。”

外星人告诉总理,我得到“关于您的使者到我们世界的好消息和坏消息” 好消息是他们尝起来像鸡肉。”

5 个答案:

答案 0 :(得分:4)

此代码应该有效:

text = input("Enter the text: \n")
lines = text.split('. ')  # Split the sentences

for index, line in enumerate(lines):
    lines[index] = line[0].upper() + line[1:]
print(". ".join(lines))

您的代码中的错误是str.split(chars)删除了分隔定界符char,这就是删除句点的原因。

很抱歉,由于我想不出要说什么,所以没有提供详尽的描述。请随时在评论中提问。

编辑:让我尝试解释我做了什么。

  • 第1-2行:接受输入并按'. '分成一个列表。在样本输入上,给出:['"We have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister', 'the good news is they tasted like chicken.']。请注意,句号已从第一句分开的地方消失。
  • 第4行:enumerate是一个生成器,并且通过迭代器进行迭代,并以tuple的形式返回迭代器中每个项目的索引和项目。
  • 第5行:用第一个字符的大写字母加上该行的其余部分替换linelines的位置。
  • 第6行:打印消息。 ". ".join(lines)基本上颠倒了您对split所做的操作。 str.join(l)接受字符串l的迭代器,并将它们与str粘贴在所有项目之间。如果没有这一点,您将错过自己的经期。

答案 1 :(得分:0)

分割分割字符串,并且所有新字符串都不包含定界符-或分割的字符串/字符。

将代码更改为此:

text = input("Enter the text: \n")
lines = text.split('. ') #Split the sentences

final_text = ". ".join([line[0].upper()+line[1:] for line in lines])
print(final_text)

答案 2 :(得分:0)

当您用TH.Pat分割字符串时,这会将Catch从字符串中删除,并将其余部分放入列表中。您需要将丢失的句点添加到句子中,以使其正常工作。

此外,这可能导致最后一句具有双倍句号,因为它的末尾只有". ",而不是". "。我们需要在开始时删除句点(如果存在),以确保不会出现双句点。

"."

我们还可以使该解决方案更简洁:

". "

通过使用text = input("Enter the text: \n") output = "" if (text[-1] == '.'): # remove the last period to avoid double periods in the last sentence text = text[:-1] lines = text.split('. ') #Split the sentences for line in lines: a = line[0].capitalize() # capitalize the first word of sentence for i in range(1, len(line)): a = a + line[i] a = a + '.' # add the removed period output = output + a print (output) ,可以获取删除了第一个字符的字符串副本。使用text = input("Enter the text: \n") output = "" if (text[-1] == '.'): # remove the last period to avoid double periods in the last sentence text = text[:-1] lines = text.split('. ') #Split the sentences for line in lines: a = line[0].capitalize() + line [1:] + '.' output = output + a print (output) 将为您提供字符串的副本,最后一个字符被删除。

答案 3 :(得分:0)

以下内容可以处理多种句子类型(以“。”,“!”,“?”等结尾),并大写每个句子的第一个单词。由于要保留现有的大写字母,因此不能使用大写功能(因为它不会使句子的开头单词变为小写)。您可以将lambda函数放入list comp中,以利用每个句子的第一个字母的upper(),这使其余句子完全保持不变。

import re

original_sentence = 'we have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. the good news is they tasted like chicken.'

val = re.split('([.!?] *)', original_sentence)

new_sentence = ''.join([(lambda x: x[0].upper() + x[1:])(each) if len(each) > 1 else each for each in val])

print(new_sentence)

“ new_sentence”列表理解与说出的一样:

sentence = []

for each in val:
    sentence.append((lambda x: x[0].upper() + x[1:])(each) if len(each) > 1 else each)

print(''.join(sentence))

答案 4 :(得分:0)

您可以使用re.sub函数将模式. \w之后的所有字符替换为大写字母。

import re

original_sentence = 'we have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. the good news is they tasted like chicken.'

def replacer(match_obj):                   
    return match_obj.group(0).upper()

# Replace the very first characer or any other following a dot and a space by its upper case version.
re.sub(r"(?<=\. )(\w)|^\w", replacer, original_sentence)

>>> 'We have good news and bad news about your emissaries to our world," the extraterrestrial ambassador informed the Prime Minister. The good news is they tasted like chicken.'