<p>你的<code>if</code>有问题<code>if extStr1 and extStr2 in baseStr</code>不会做你认为它会做的事。您需要检查<em>每个子字符串</em>是否分别位于基本字符串<em>中</em>如<code>if extStr1 in baseStr and extStr2 in baseStr</code></p>
<p>我建议不要使用循环或递归,而是使用正则表达式和<a href="https://docs.python.org/3/library/re.html#re.sub" rel="nofollow noreferrer">^{<cd4>}</a></p>
<p>首先,我们构建一个正则表达式来匹配<code>yes</code>,然后尽可能少地匹配任何字符,然后<code>no</code>:<code>yes.*?no</code>{a2}</p>
<p>记住<a href="https://docs.python.org/3/library/re.html#re.escape" rel="nofollow noreferrer">^{<cd8>}</a>输入字符串,以防它们包含特殊字符</p>
<p>接下来,我们用<code>yesno</code>替换所有出现的这个正则表达式</p>
<pre><code>import re
def extractFromString(baseStr, extStr1, extStr2):
rexp = re.compile(f"{re.escape(extStr1)}.*?{re.escape(extStr2)}")
return re.sub(rexp, extStr1 + extStr2, baseStr)
</code></pre>
<p>用一堆输入运行这个</p>
<pre><code>extractFromString("yes_and_no___yes_and_no", "yes", "no")
# Output: 'yesno___yesno'
extractFromString("aha_no_yes_deleteThis_no_no_no_yes", "yes", "no")
# Output: 'aha_no_yesno_no_no_yes'
extractFromString("yes_yes_aha_no_no_yes_no_no", "yes", "no")
# Output: 'yesno_no_yesno_no'
extractFromString("yes_yes_no_no", "yes", "no")
# Output: 'yesno_no'
</code></pre>