<p>在本例中,正则表达式就可以了</p>
<pre><code>import re
s = "StopWhateverYouAreDoingInterestingIDontCare"
t = re.sub(r'(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z])', ' ', s)
</code></pre>
<p>解释:</p>
<p><code>(?<=[a-z])(?=[A-Z])</code>-一个小写字母的后向查找,后跟一个前向大写字母</p>
<p><code>|</code>-(表示<code>or</code>)</p>
<p><code>(?<=[A-Z])(?=[A-Z])</code>-对大写字母的向后查找,后跟向前查找的大写字母</p>
<p>当小写字母后跟大写字母时,或者当大写字母后跟大写字母时,此正则表达式将替换空格</p>
<p>更新:这不能正确地将单词小写(除了<strong>I</strong>和第一个\u单词)</p>
<p>更新2:对此的修复是:</p>
<pre><code>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))
</code></pre>
<p>印刷品:</p>
<pre><code>Stop whatever you are doing interesting I dont care
</code></pre>
<p>更新3:我了解了为什么您的代码不能正确地构成句子(我应该首先这样做,而不是发布我自己的解决方案^{<cd5>)</p>
<p>下面是更正后的代码,其中包含一些关于更改的注释</p>
<pre><code>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())
</code></pre>
<p>!。我注释掉了<code>index_of_i = string_input.index("I")</code>行,因为它不满足您的需要(它找到<em>第一个</em>大写字母I的索引,而不是应该独立的I(它在<code>Interesting</code>中找到I的索引,而不是在<code>string_input</code>字符串中找到<code>IDont</code>)。这不是一个正确的语句</p>
<ol start=“2”>
<li><code>for i, char in enumerate(string_input[1:], 1)</code>{a1}表示字符串中从1开始的字母的索引(因为{<cd11>}从索引1开始,所以它们是同步的)。{<cd12>}是{<cd9>中字母的索引</li>
</ol>
<p>我将<code>i</code>更改为<code>char</code>,以便更清楚地说明<code>char</code>是字符。除了这些更改之外,代码与您编写的代码相同</p>
<p>现在程序给出正确的输出</p>