我想确保文本中的每个句子都以大写字母开头。
例如这位外星大使对总理说:“我们有关于你的使者进入世界的好消息和坏消息。”好消息是他们尝起来像鸡肉。”应该成为
“我们有关于你的使者到我们世界的好消息和坏消息,”外星大使告诉总理。好消息是他们尝起来像鸡肉。”
我尝试使用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)
我想获得“我们对你的使者到世界的好消息和坏消息,”这位外星大使告诉总理。好消息是他们尝起来像鸡肉。”
外星人告诉总理,我得到“关于您的使者到我们世界的好消息和坏消息” 好消息是他们尝起来像鸡肉。”
答案 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
,这就是删除句点的原因。
很抱歉,由于我想不出要说什么,所以没有提供详尽的描述。请随时在评论中提问。
编辑:让我尝试解释我做了什么。
'. '
分成一个列表。在样本输入上,给出:['"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.']
。请注意,句号已从第一句分开的地方消失。enumerate
是一个生成器,并且通过迭代器进行迭代,并以tuple
的形式返回迭代器中每个项目的索引和项目。line
中lines
的位置。". ".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.'