将字符串转换为一个字符串,其中单词之间用空格分隔,只有第一个单词以大写字母开头

2024-10-01 05:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个脚本,该脚本将接受一个字符串作为输入,其中所有单词一起运行,但每个单词的第一个字符都是大写。它应该将字符串转换为一个字符串,其中单词之间用空格分隔,并且只有第一个单词以大写字母开头

例如(输入):

"StopWhateverYouAreDoingInterestingIDontCare"

预期产出:

"Stop whatever you are doing interesting I dont care"

以下是我到目前为止写的一篇:

string_input = "StopWhateverYouAreDoingInterestingIDontCare"

def organize_string():
   start_sentence = string_input[0] 
   index_of_i = string_input.index("I")
   for i in string_input[1:]: 
      if i == "I" and string_input[index_of_i + 1].isupper(): 
           start_sentence += ' ' + i 
      elif i.isupper():      
           start_sentence += ' ' + i.lower()
      else: 
           start_sentence += i
return start_sentence

虽然这涉及到一些部分,但我正在努力区分字母“I”是单个还是整个单词。以下是我的输出:

"Stop whatever you are doing interesting i dont care"

单个“I”需要大写,而“有趣”一词中的“I”应该小写为“有趣”

我将非常感谢所有的帮助


Tags: 字符串脚本youinputstringindex单词start
3条回答
string_input = "StopWhateverYouAreDoingInterestingIDontCare"
counter = 1
def organize_string():
    global counter
    start_sentence = string_input[0] 
    for i in string_input[1:]: 
        if i == "I" and string_input[counter+1].isupper():
            start_sentence += ' ' + i
        elif i.isupper():      
            start_sentence += ' ' + i.lower()
        else: 
            start_sentence += i
        counter += 1
    print(start_sentence)

organize_string()

我对你的程序做了一些修改。我用计数器检查索引位置。我得到了您的预期输出:

Stop whatever you are doing interesting I dont care 

在本例中,正则表达式就可以了

import re
s = "StopWhateverYouAreDoingInterestingIDontCare"
t = re.sub(r'(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z])', ' ', s)

解释:

(?<=[a-z])(?=[A-Z])-一个小写字母的后向查找,后跟一个前向大写字母

|-(表示or

(?<=[A-Z])(?=[A-Z])-对大写字母的向后查找,后跟向前查找的大写字母

当小写字母后跟大写字母时,或者当大写字母后跟大写字母时,此正则表达式将替换空格

更新:这不能正确地将单词小写(除了I和第一个\u单词)

更新2:对此的修复是:

import re

s = "StopWhateverYouAreDoingInterestingIDontCare"

first_word, *rest = re.split(r'(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z])', s)

rest = [word.lower() if word != 'I' else word for word in rest]

print(first_word, ' '.join(rest))

印刷品:

Stop whatever you are doing interesting I dont care

更新3:我了解了为什么您的代码不能正确地构成句子(我应该首先这样做,而不是发布我自己的解决方案^{

下面是更正后的代码,其中包含一些关于更改的注释

string_input = "StopWhateverYouAreDoingInterestingIDontCare"

def organize_string():
   start_sentence = string_input[0] 
   #index_of_i = string_input.index("I")
   for i, char in enumerate(string_input[1:], start=1):
      if char == "I" and string_input[i + 1].isupper(): 
           start_sentence += ' ' + char          
      elif char.isupper():      
           start_sentence += ' ' + char.lower()
      else: 
           start_sentence += char
      
   return start_sentence

print(organize_string())

!。我注释掉了index_of_i = string_input.index("I")行,因为它不满足您的需要(它找到第一个大写字母I的索引,而不是应该独立的I(它在Interesting中找到I的索引,而不是在string_input字符串中找到IDont)。这不是一个正确的语句

  1. for i, char in enumerate(string_input[1:], 1){a1}表示字符串中从1开始的字母的索引(因为{}从索引1开始,所以它们是同步的)。{}是{中字母的索引

我将i更改为char,以便更清楚地说明char是字符。除了这些更改之外,代码与您编写的代码相同

现在程序给出正确的输出

s = 'StopWhateverYouAreDoingInterestingIDontCare'
 
ss = ' '

res = ''.join(ss + x if x.isupper() else x for x in s).strip(ss).split(ss)

sr = ''

for w in res:

  sr = sr + w.lower() + ' '
  
print(sr[0].upper() + sr[1:])

输出

Stop whatever you are doing interesting i dont care 

相关问题 更多 >